@aglyn/plugins-crm 1.0.0-beta.143
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/LICENSE +201 -0
- package/README.md +7 -0
- package/package.json +57 -0
- package/src/index.d.ts +21 -0
- package/src/index.js +29 -0
- package/src/index.js.map +1 -0
- package/src/lib/components/activity-list.d.ts +98 -0
- package/src/lib/components/activity-list.js +321 -0
- package/src/lib/components/activity-list.js.map +1 -0
- package/src/lib/components/activity-queries.d.ts +117 -0
- package/src/lib/components/activity-queries.js +198 -0
- package/src/lib/components/activity-queries.js.map +1 -0
- package/src/lib/components/add-to-list-button.d.ts +25 -0
- package/src/lib/components/add-to-list-button.js +64 -0
- package/src/lib/components/add-to-list-button.js.map +1 -0
- package/src/lib/components/add-to-list-dialog.d.ts +24 -0
- package/src/lib/components/add-to-list-dialog.js +327 -0
- package/src/lib/components/add-to-list-dialog.js.map +1 -0
- package/src/lib/components/assignment-rule-drawer.d.ts +43 -0
- package/src/lib/components/assignment-rule-drawer.js +293 -0
- package/src/lib/components/assignment-rule-drawer.js.map +1 -0
- package/src/lib/components/companies-bulk-bar.d.ts +29 -0
- package/src/lib/components/companies-bulk-bar.js +274 -0
- package/src/lib/components/companies-bulk-bar.js.map +1 -0
- package/src/lib/components/companies-section.d.ts +54 -0
- package/src/lib/components/companies-section.js +522 -0
- package/src/lib/components/companies-section.js.map +1 -0
- package/src/lib/components/company-contacts-card.d.ts +49 -0
- package/src/lib/components/company-contacts-card.js +435 -0
- package/src/lib/components/company-contacts-card.js.map +1 -0
- package/src/lib/components/company-deals-card.d.ts +20 -0
- package/src/lib/components/company-deals-card.js +38 -0
- package/src/lib/components/company-deals-card.js.map +1 -0
- package/src/lib/components/company-detail-page.d.ts +20 -0
- package/src/lib/components/company-detail-page.js +165 -0
- package/src/lib/components/company-detail-page.js.map +1 -0
- package/src/lib/components/company-edit-drawer.d.ts +65 -0
- package/src/lib/components/company-edit-drawer.js +433 -0
- package/src/lib/components/company-edit-drawer.js.map +1 -0
- package/src/lib/components/company-import-drawer.d.ts +42 -0
- package/src/lib/components/company-import-drawer.js +99 -0
- package/src/lib/components/company-import-drawer.js.map +1 -0
- package/src/lib/components/company-picker.d.ts +127 -0
- package/src/lib/components/company-picker.js +323 -0
- package/src/lib/components/company-picker.js.map +1 -0
- package/src/lib/components/company-properties-card.d.ts +47 -0
- package/src/lib/components/company-properties-card.js +289 -0
- package/src/lib/components/company-properties-card.js.map +1 -0
- package/src/lib/components/contact-address-fields.d.ts +29 -0
- package/src/lib/components/contact-address-fields.js +149 -0
- package/src/lib/components/contact-address-fields.js.map +1 -0
- package/src/lib/components/contact-associations-card.d.ts +72 -0
- package/src/lib/components/contact-associations-card.js +296 -0
- package/src/lib/components/contact-associations-card.js.map +1 -0
- package/src/lib/components/contact-custom-columns.d.ts +38 -0
- package/src/lib/components/contact-custom-columns.js +102 -0
- package/src/lib/components/contact-custom-columns.js.map +1 -0
- package/src/lib/components/contact-custom-fields-card.d.ts +39 -0
- package/src/lib/components/contact-custom-fields-card.js +204 -0
- package/src/lib/components/contact-custom-fields-card.js.map +1 -0
- package/src/lib/components/contact-deals-card.d.ts +20 -0
- package/src/lib/components/contact-deals-card.js +38 -0
- package/src/lib/components/contact-deals-card.js.map +1 -0
- package/src/lib/components/contact-detail-page.d.ts +46 -0
- package/src/lib/components/contact-detail-page.js +535 -0
- package/src/lib/components/contact-detail-page.js.map +1 -0
- package/src/lib/components/contact-duplicates-card.d.ts +42 -0
- package/src/lib/components/contact-duplicates-card.js +167 -0
- package/src/lib/components/contact-duplicates-card.js.map +1 -0
- package/src/lib/components/contact-field-drawer.d.ts +64 -0
- package/src/lib/components/contact-field-drawer.js +251 -0
- package/src/lib/components/contact-field-drawer.js.map +1 -0
- package/src/lib/components/contact-import-drawer.d.ts +46 -0
- package/src/lib/components/contact-import-drawer.js +149 -0
- package/src/lib/components/contact-import-drawer.js.map +1 -0
- package/src/lib/components/contact-known-by-card.d.ts +39 -0
- package/src/lib/components/contact-known-by-card.js +142 -0
- package/src/lib/components/contact-known-by-card.js.map +1 -0
- package/src/lib/components/contact-list-columns.d.ts +53 -0
- package/src/lib/components/contact-list-columns.js +288 -0
- package/src/lib/components/contact-list-columns.js.map +1 -0
- package/src/lib/components/contact-merge-dialog.d.ts +79 -0
- package/src/lib/components/contact-merge-dialog.js +405 -0
- package/src/lib/components/contact-merge-dialog.js.map +1 -0
- package/src/lib/components/contact-properties-card.d.ts +89 -0
- package/src/lib/components/contact-properties-card.js +492 -0
- package/src/lib/components/contact-properties-card.js.map +1 -0
- package/src/lib/components/contact-timeline-card.d.ts +68 -0
- package/src/lib/components/contact-timeline-card.js +435 -0
- package/src/lib/components/contact-timeline-card.js.map +1 -0
- package/src/lib/components/contacts-bulk-bar.d.ts +91 -0
- package/src/lib/components/contacts-bulk-bar.js +493 -0
- package/src/lib/components/contacts-bulk-bar.js.map +1 -0
- package/src/lib/components/contacts-section.d.ts +26 -0
- package/src/lib/components/contacts-section.js +1025 -0
- package/src/lib/components/contacts-section.js.map +1 -0
- package/src/lib/components/copy-capture-address-button.d.ts +33 -0
- package/src/lib/components/copy-capture-address-button.js +60 -0
- package/src/lib/components/copy-capture-address-button.js.map +1 -0
- package/src/lib/components/crm-attribution-zone.d.ts +38 -0
- package/src/lib/components/crm-attribution-zone.js +36 -0
- package/src/lib/components/crm-attribution-zone.js.map +1 -0
- package/src/lib/components/crm-booking-zone.d.ts +61 -0
- package/src/lib/components/crm-booking-zone.js +50 -0
- package/src/lib/components/crm-booking-zone.js.map +1 -0
- package/src/lib/components/crm-bulk-bar-frame.d.ts +47 -0
- package/src/lib/components/crm-bulk-bar-frame.js +137 -0
- package/src/lib/components/crm-bulk-bar-frame.js.map +1 -0
- package/src/lib/components/crm-call-actions.d.ts +65 -0
- package/src/lib/components/crm-call-actions.js +110 -0
- package/src/lib/components/crm-call-actions.js.map +1 -0
- package/src/lib/components/crm-column-menu.d.ts +21 -0
- package/src/lib/components/crm-column-menu.js +103 -0
- package/src/lib/components/crm-column-menu.js.map +1 -0
- package/src/lib/components/crm-console-page.d.ts +19 -0
- package/src/lib/components/crm-console-page.js +151 -0
- package/src/lib/components/crm-console-page.js.map +1 -0
- package/src/lib/components/crm-console-sections.d.ts +52 -0
- package/src/lib/components/crm-console-sections.js +83 -0
- package/src/lib/components/crm-console-sections.js.map +1 -0
- package/src/lib/components/crm-custom-field-control.d.ts +26 -0
- package/src/lib/components/crm-custom-field-control.js +131 -0
- package/src/lib/components/crm-custom-field-control.js.map +1 -0
- package/src/lib/components/crm-email-template-tools.d.ts +69 -0
- package/src/lib/components/crm-email-template-tools.js +240 -0
- package/src/lib/components/crm-email-template-tools.js.map +1 -0
- package/src/lib/components/crm-export-all-button.d.ts +39 -0
- package/src/lib/components/crm-export-all-button.js +98 -0
- package/src/lib/components/crm-export-all-button.js.map +1 -0
- package/src/lib/components/crm-filter-bar.d.ts +53 -0
- package/src/lib/components/crm-filter-bar.js +294 -0
- package/src/lib/components/crm-filter-bar.js.map +1 -0
- package/src/lib/components/crm-glance-card.d.ts +54 -0
- package/src/lib/components/crm-glance-card.js +219 -0
- package/src/lib/components/crm-glance-card.js.map +1 -0
- package/src/lib/components/crm-next-activity-column.d.ts +35 -0
- package/src/lib/components/crm-next-activity-column.js +100 -0
- package/src/lib/components/crm-next-activity-column.js.map +1 -0
- package/src/lib/components/crm-record-header.d.ts +97 -0
- package/src/lib/components/crm-record-header.js +160 -0
- package/src/lib/components/crm-record-header.js.map +1 -0
- package/src/lib/components/crm-record-insights-zone.d.ts +50 -0
- package/src/lib/components/crm-record-insights-zone.js +169 -0
- package/src/lib/components/crm-record-insights-zone.js.map +1 -0
- package/src/lib/components/crm-record-picker.d.ts +42 -0
- package/src/lib/components/crm-record-picker.js +104 -0
- package/src/lib/components/crm-record-picker.js.map +1 -0
- package/src/lib/components/crm-send-email-button.d.ts +39 -0
- package/src/lib/components/crm-send-email-button.js +81 -0
- package/src/lib/components/crm-send-email-button.js.map +1 -0
- package/src/lib/components/crm-send-email-dialog.d.ts +61 -0
- package/src/lib/components/crm-send-email-dialog.js +851 -0
- package/src/lib/components/crm-send-email-dialog.js.map +1 -0
- package/src/lib/components/crm-site-picker.d.ts +61 -0
- package/src/lib/components/crm-site-picker.js +99 -0
- package/src/lib/components/crm-site-picker.js.map +1 -0
- package/src/lib/components/crm-suite-lock.d.ts +29 -0
- package/src/lib/components/crm-suite-lock.js +114 -0
- package/src/lib/components/crm-suite-lock.js.map +1 -0
- package/src/lib/components/crm-tasks-due-card.d.ts +42 -0
- package/src/lib/components/crm-tasks-due-card.js +225 -0
- package/src/lib/components/crm-tasks-due-card.js.map +1 -0
- package/src/lib/components/crm-views-control.d.ts +65 -0
- package/src/lib/components/crm-views-control.js +518 -0
- package/src/lib/components/crm-views-control.js.map +1 -0
- package/src/lib/components/csv-import-drawer.d.ts +132 -0
- package/src/lib/components/csv-import-drawer.js +746 -0
- package/src/lib/components/csv-import-drawer.js.map +1 -0
- package/src/lib/components/deal-board.d.ts +70 -0
- package/src/lib/components/deal-board.js +478 -0
- package/src/lib/components/deal-board.js.map +1 -0
- package/src/lib/components/deal-detail-page.d.ts +18 -0
- package/src/lib/components/deal-detail-page.js +323 -0
- package/src/lib/components/deal-detail-page.js.map +1 -0
- package/src/lib/components/deal-edit-drawer.d.ts +59 -0
- package/src/lib/components/deal-edit-drawer.js +640 -0
- package/src/lib/components/deal-edit-drawer.js.map +1 -0
- package/src/lib/components/deal-import-drawer.d.ts +24 -0
- package/src/lib/components/deal-import-drawer.js +83 -0
- package/src/lib/components/deal-import-drawer.js.map +1 -0
- package/src/lib/components/deal-products-card.d.ts +48 -0
- package/src/lib/components/deal-products-card.js +614 -0
- package/src/lib/components/deal-products-card.js.map +1 -0
- package/src/lib/components/deal-properties-card.d.ts +29 -0
- package/src/lib/components/deal-properties-card.js +144 -0
- package/src/lib/components/deal-properties-card.js.map +1 -0
- package/src/lib/components/deal-stage-card.d.ts +24 -0
- package/src/lib/components/deal-stage-card.js +199 -0
- package/src/lib/components/deal-stage-card.js.map +1 -0
- package/src/lib/components/deals-bulk-bar.d.ts +31 -0
- package/src/lib/components/deals-bulk-bar.js +340 -0
- package/src/lib/components/deals-bulk-bar.js.map +1 -0
- package/src/lib/components/deals-section.d.ts +49 -0
- package/src/lib/components/deals-section.js +767 -0
- package/src/lib/components/deals-section.js.map +1 -0
- package/src/lib/components/email-capture-card.d.ts +42 -0
- package/src/lib/components/email-capture-card.js +134 -0
- package/src/lib/components/email-capture-card.js.map +1 -0
- package/src/lib/components/email-template-drawer.d.ts +33 -0
- package/src/lib/components/email-template-drawer.js +209 -0
- package/src/lib/components/email-template-drawer.js.map +1 -0
- package/src/lib/components/email-templates-card.d.ts +33 -0
- package/src/lib/components/email-templates-card.js +370 -0
- package/src/lib/components/email-templates-card.js.map +1 -0
- package/src/lib/components/erase-person-action.d.ts +92 -0
- package/src/lib/components/erase-person-action.js +261 -0
- package/src/lib/components/erase-person-action.js.map +1 -0
- package/src/lib/components/fields-section.d.ts +37 -0
- package/src/lib/components/fields-section.js +641 -0
- package/src/lib/components/fields-section.js.map +1 -0
- package/src/lib/components/form-contact-fields-card.d.ts +46 -0
- package/src/lib/components/form-contact-fields-card.js +253 -0
- package/src/lib/components/form-contact-fields-card.js.map +1 -0
- package/src/lib/components/insert-link-at-caret.d.ts +28 -0
- package/src/lib/components/insert-link-at-caret.js +37 -0
- package/src/lib/components/insert-link-at-caret.js.map +1 -0
- package/src/lib/components/lead-convert-dialog.d.ts +32 -0
- package/src/lib/components/lead-convert-dialog.js +493 -0
- package/src/lib/components/lead-convert-dialog.js.map +1 -0
- package/src/lib/components/lead-detail-page.d.ts +16 -0
- package/src/lib/components/lead-detail-page.js +163 -0
- package/src/lib/components/lead-detail-page.js.map +1 -0
- package/src/lib/components/lead-history-card.d.ts +32 -0
- package/src/lib/components/lead-history-card.js +165 -0
- package/src/lib/components/lead-history-card.js.map +1 -0
- package/src/lib/components/lead-import-drawer.d.ts +24 -0
- package/src/lib/components/lead-import-drawer.js +95 -0
- package/src/lib/components/lead-import-drawer.js.map +1 -0
- package/src/lib/components/lead-owner-select.d.ts +35 -0
- package/src/lib/components/lead-owner-select.js +91 -0
- package/src/lib/components/lead-owner-select.js.map +1 -0
- package/src/lib/components/lead-properties-card.d.ts +61 -0
- package/src/lib/components/lead-properties-card.js +395 -0
- package/src/lib/components/lead-properties-card.js.map +1 -0
- package/src/lib/components/lead-status-chip.d.ts +12 -0
- package/src/lib/components/lead-status-chip.js +43 -0
- package/src/lib/components/lead-status-chip.js.map +1 -0
- package/src/lib/components/lead-surfaces-note.d.ts +126 -0
- package/src/lib/components/lead-surfaces-note.js +262 -0
- package/src/lib/components/lead-surfaces-note.js.map +1 -0
- package/src/lib/components/lead-unqualify-dialog.d.ts +24 -0
- package/src/lib/components/lead-unqualify-dialog.js +125 -0
- package/src/lib/components/lead-unqualify-dialog.js.map +1 -0
- package/src/lib/components/leads-bulk-bar.d.ts +58 -0
- package/src/lib/components/leads-bulk-bar.js +307 -0
- package/src/lib/components/leads-bulk-bar.js.map +1 -0
- package/src/lib/components/leads-section.d.ts +23 -0
- package/src/lib/components/leads-section.js +664 -0
- package/src/lib/components/leads-section.js.map +1 -0
- package/src/lib/components/linked-deals-card.d.ts +32 -0
- package/src/lib/components/linked-deals-card.js +163 -0
- package/src/lib/components/linked-deals-card.js.map +1 -0
- package/src/lib/components/log-activity-dialog.d.ts +60 -0
- package/src/lib/components/log-activity-dialog.js +368 -0
- package/src/lib/components/log-activity-dialog.js.map +1 -0
- package/src/lib/components/lost-reason-dialog.d.ts +26 -0
- package/src/lib/components/lost-reason-dialog.js +95 -0
- package/src/lib/components/lost-reason-dialog.js.map +1 -0
- package/src/lib/components/new-contact-drawer.d.ts +78 -0
- package/src/lib/components/new-contact-drawer.js +343 -0
- package/src/lib/components/new-contact-drawer.js.map +1 -0
- package/src/lib/components/org-lead-surfaces-note.d.ts +57 -0
- package/src/lib/components/org-lead-surfaces-note.js +172 -0
- package/src/lib/components/org-lead-surfaces-note.js.map +1 -0
- package/src/lib/components/owner-avatar.d.ts +18 -0
- package/src/lib/components/owner-avatar.js +61 -0
- package/src/lib/components/owner-avatar.js.map +1 -0
- package/src/lib/components/pipeline-stages-dialog.d.ts +43 -0
- package/src/lib/components/pipeline-stages-dialog.js +339 -0
- package/src/lib/components/pipeline-stages-dialog.js.map +1 -0
- package/src/lib/components/pipelines-dialog.d.ts +55 -0
- package/src/lib/components/pipelines-dialog.js +517 -0
- package/src/lib/components/pipelines-dialog.js.map +1 -0
- package/src/lib/components/recent-activity-feed.d.ts +39 -0
- package/src/lib/components/recent-activity-feed.js +103 -0
- package/src/lib/components/recent-activity-feed.js.map +1 -0
- package/src/lib/components/recipes-card.d.ts +39 -0
- package/src/lib/components/recipes-card.js +485 -0
- package/src/lib/components/recipes-card.js.map +1 -0
- package/src/lib/components/record-activity-card.d.ts +26 -0
- package/src/lib/components/record-activity-card.js +121 -0
- package/src/lib/components/record-activity-card.js.map +1 -0
- package/src/lib/components/record-files-card.d.ts +67 -0
- package/src/lib/components/record-files-card.js +290 -0
- package/src/lib/components/record-files-card.js.map +1 -0
- package/src/lib/components/record-tasks-card.d.ts +32 -0
- package/src/lib/components/record-tasks-card.js +306 -0
- package/src/lib/components/record-tasks-card.js.map +1 -0
- package/src/lib/components/reports/activity-card.d.ts +57 -0
- package/src/lib/components/reports/activity-card.js +281 -0
- package/src/lib/components/reports/activity-card.js.map +1 -0
- package/src/lib/components/reports/closed-deals-card.d.ts +20 -0
- package/src/lib/components/reports/closed-deals-card.js +194 -0
- package/src/lib/components/reports/closed-deals-card.js.map +1 -0
- package/src/lib/components/reports/contacts-mix-card.d.ts +27 -0
- package/src/lib/components/reports/contacts-mix-card.js +161 -0
- package/src/lib/components/reports/contacts-mix-card.js.map +1 -0
- package/src/lib/components/reports/contacts-trend-card.d.ts +31 -0
- package/src/lib/components/reports/contacts-trend-card.js +144 -0
- package/src/lib/components/reports/contacts-trend-card.js.map +1 -0
- package/src/lib/components/reports/forecast-card.d.ts +22 -0
- package/src/lib/components/reports/forecast-card.js +251 -0
- package/src/lib/components/reports/forecast-card.js.map +1 -0
- package/src/lib/components/reports/lead-counts.d.ts +32 -0
- package/src/lib/components/reports/lead-counts.js +44 -0
- package/src/lib/components/reports/lead-counts.js.map +1 -0
- package/src/lib/components/reports/lead-funnel-card.d.ts +38 -0
- package/src/lib/components/reports/lead-funnel-card.js +375 -0
- package/src/lib/components/reports/lead-funnel-card.js.map +1 -0
- package/src/lib/components/reports/pipeline-card.d.ts +19 -0
- package/src/lib/components/reports/pipeline-card.js +338 -0
- package/src/lib/components/reports/pipeline-card.js.map +1 -0
- package/src/lib/components/reports/report-bar-chart.d.ts +39 -0
- package/src/lib/components/reports/report-bar-chart.js +133 -0
- package/src/lib/components/reports/report-bar-chart.js.map +1 -0
- package/src/lib/components/reports/report-breakdown.d.ts +32 -0
- package/src/lib/components/reports/report-breakdown.js +105 -0
- package/src/lib/components/reports/report-breakdown.js.map +1 -0
- package/src/lib/components/reports/report-export.d.ts +37 -0
- package/src/lib/components/reports/report-export.js +66 -0
- package/src/lib/components/reports/report-export.js.map +1 -0
- package/src/lib/components/reports/report-format.d.ts +36 -0
- package/src/lib/components/reports/report-format.js +43 -0
- package/src/lib/components/reports/report-format.js.map +1 -0
- package/src/lib/components/reports/report-scope.d.ts +81 -0
- package/src/lib/components/reports/report-scope.js +58 -0
- package/src/lib/components/reports/report-scope.js.map +1 -0
- package/src/lib/components/reports/report-stat-tile.d.ts +47 -0
- package/src/lib/components/reports/report-stat-tile.js +96 -0
- package/src/lib/components/reports/report-stat-tile.js.map +1 -0
- package/src/lib/components/reports/source-conversion-card.d.ts +28 -0
- package/src/lib/components/reports/source-conversion-card.js +205 -0
- package/src/lib/components/reports/source-conversion-card.js.map +1 -0
- package/src/lib/components/reports/tasks-card.d.ts +26 -0
- package/src/lib/components/reports/tasks-card.js +279 -0
- package/src/lib/components/reports/tasks-card.js.map +1 -0
- package/src/lib/components/reports/use-aggregate-read.d.ts +99 -0
- package/src/lib/components/reports/use-aggregate-read.js +195 -0
- package/src/lib/components/reports/use-aggregate-read.js.map +1 -0
- package/src/lib/components/reports/won-lost-by-owner-card.d.ts +30 -0
- package/src/lib/components/reports/won-lost-by-owner-card.js +168 -0
- package/src/lib/components/reports/won-lost-by-owner-card.js.map +1 -0
- package/src/lib/components/reports-section.d.ts +42 -0
- package/src/lib/components/reports-section.js +308 -0
- package/src/lib/components/reports-section.js.map +1 -0
- package/src/lib/components/sending-addresses-card.d.ts +49 -0
- package/src/lib/components/sending-addresses-card.js +262 -0
- package/src/lib/components/sending-addresses-card.js.map +1 -0
- package/src/lib/components/settings-section.d.ts +151 -0
- package/src/lib/components/settings-section.js +783 -0
- package/src/lib/components/settings-section.js.map +1 -0
- package/src/lib/components/task-cells.d.ts +51 -0
- package/src/lib/components/task-cells.js +139 -0
- package/src/lib/components/task-cells.js.map +1 -0
- package/src/lib/components/task-edit-drawer.d.ts +53 -0
- package/src/lib/components/task-edit-drawer.js +483 -0
- package/src/lib/components/task-edit-drawer.js.map +1 -0
- package/src/lib/components/task-import-drawer.d.ts +24 -0
- package/src/lib/components/task-import-drawer.js +82 -0
- package/src/lib/components/task-import-drawer.js.map +1 -0
- package/src/lib/components/task-snooze-menu.d.ts +65 -0
- package/src/lib/components/task-snooze-menu.js +207 -0
- package/src/lib/components/task-snooze-menu.js.map +1 -0
- package/src/lib/components/tasks-bulk-bar.d.ts +25 -0
- package/src/lib/components/tasks-bulk-bar.js +348 -0
- package/src/lib/components/tasks-bulk-bar.js.map +1 -0
- package/src/lib/components/tasks-calendar.d.ts +38 -0
- package/src/lib/components/tasks-calendar.js +228 -0
- package/src/lib/components/tasks-calendar.js.map +1 -0
- package/src/lib/components/tasks-section.d.ts +27 -0
- package/src/lib/components/tasks-section.js +579 -0
- package/src/lib/components/tasks-section.js.map +1 -0
- package/src/lib/components/use-contact-campaign-emails.d.ts +32 -0
- package/src/lib/components/use-contact-campaign-emails.js +83 -0
- package/src/lib/components/use-contact-campaign-emails.js.map +1 -0
- package/src/lib/components/use-crm-api.d.ts +44 -0
- package/src/lib/components/use-crm-api.js +84 -0
- package/src/lib/components/use-crm-api.js.map +1 -0
- package/src/lib/components/use-crm-inbound-address.d.ts +60 -0
- package/src/lib/components/use-crm-inbound-address.js +124 -0
- package/src/lib/components/use-crm-inbound-address.js.map +1 -0
- package/src/lib/components/use-emails-hub-path.d.ts +24 -0
- package/src/lib/components/use-emails-hub-path.js +59 -0
- package/src/lib/components/use-emails-hub-path.js.map +1 -0
- package/src/lib/components/use-member-email-aliases.d.ts +54 -0
- package/src/lib/components/use-member-email-aliases.js +186 -0
- package/src/lib/components/use-member-email-aliases.js.map +1 -0
- package/src/lib/components/use-org-members.d.ts +40 -0
- package/src/lib/components/use-org-members.js +100 -0
- package/src/lib/components/use-org-members.js.map +1 -0
- package/src/lib/constants/api-routes.d.ts +109 -0
- package/src/lib/constants/api-routes.js +74 -0
- package/src/lib/constants/api-routes.js.map +1 -0
- package/src/lib/constants/bundle-common.d.ts +14 -0
- package/src/lib/constants/bundle-common.js +14 -0
- package/src/lib/constants/bundle-common.js.map +1 -0
- package/src/lib/constants/company-filters.d.ts +18 -0
- package/src/lib/constants/company-filters.js +51 -0
- package/src/lib/constants/company-filters.js.map +1 -0
- package/src/lib/constants/contact-filters.d.ts +38 -0
- package/src/lib/constants/contact-filters.js +294 -0
- package/src/lib/constants/contact-filters.js.map +1 -0
- package/src/lib/hooks/use-contact-field-definitions.d.ts +48 -0
- package/src/lib/hooks/use-contact-field-definitions.js +72 -0
- package/src/lib/hooks/use-contact-field-definitions.js.map +1 -0
- package/src/lib/hooks/use-contact-update.d.ts +25 -0
- package/src/lib/hooks/use-contact-update.js +80 -0
- package/src/lib/hooks/use-contact-update.js.map +1 -0
- package/src/lib/hooks/use-crm-activity-logger.d.ts +73 -0
- package/src/lib/hooks/use-crm-activity-logger.js +101 -0
- package/src/lib/hooks/use-crm-activity-logger.js.map +1 -0
- package/src/lib/hooks/use-crm-bulk-apply.d.ts +52 -0
- package/src/lib/hooks/use-crm-bulk-apply.js +112 -0
- package/src/lib/hooks/use-crm-bulk-apply.js.map +1 -0
- package/src/lib/hooks/use-crm-default-view.d.ts +24 -0
- package/src/lib/hooks/use-crm-default-view.js +64 -0
- package/src/lib/hooks/use-crm-default-view.js.map +1 -0
- package/src/lib/hooks/use-crm-email-templates.d.ts +59 -0
- package/src/lib/hooks/use-crm-email-templates.js +103 -0
- package/src/lib/hooks/use-crm-email-templates.js.map +1 -0
- package/src/lib/hooks/use-crm-hub-path.d.ts +29 -0
- package/src/lib/hooks/use-crm-hub-path.js +41 -0
- package/src/lib/hooks/use-crm-hub-path.js.map +1 -0
- package/src/lib/hooks/use-crm-org-mount.d.ts +97 -0
- package/src/lib/hooks/use-crm-org-mount.js +215 -0
- package/src/lib/hooks/use-crm-org-mount.js.map +1 -0
- package/src/lib/hooks/use-crm-record-names.d.ts +52 -0
- package/src/lib/hooks/use-crm-record-names.js +126 -0
- package/src/lib/hooks/use-crm-record-names.js.map +1 -0
- package/src/lib/hooks/use-crm-records-quota.d.ts +68 -0
- package/src/lib/hooks/use-crm-records-quota.js +118 -0
- package/src/lib/hooks/use-crm-records-quota.js.map +1 -0
- package/src/lib/hooks/use-crm-saved-view.d.ts +96 -0
- package/src/lib/hooks/use-crm-saved-view.js +329 -0
- package/src/lib/hooks/use-crm-saved-view.js.map +1 -0
- package/src/lib/hooks/use-crm-scope.d.ts +117 -0
- package/src/lib/hooks/use-crm-scope.js +147 -0
- package/src/lib/hooks/use-crm-scope.js.map +1 -0
- package/src/lib/hooks/use-crm-tasks.d.ts +85 -0
- package/src/lib/hooks/use-crm-tasks.js +153 -0
- package/src/lib/hooks/use-crm-tasks.js.map +1 -0
- package/src/lib/hooks/use-crm-view-grid.d.ts +55 -0
- package/src/lib/hooks/use-crm-view-grid.js +170 -0
- package/src/lib/hooks/use-crm-view-grid.js.map +1 -0
- package/src/lib/hooks/use-crm-views.d.ts +42 -0
- package/src/lib/hooks/use-crm-views.js +84 -0
- package/src/lib/hooks/use-crm-views.js.map +1 -0
- package/src/lib/hooks/use-deal-stage-api.d.ts +69 -0
- package/src/lib/hooks/use-deal-stage-api.js +78 -0
- package/src/lib/hooks/use-deal-stage-api.js.map +1 -0
- package/src/lib/hooks/use-deals.d.ts +47 -0
- package/src/lib/hooks/use-deals.js +105 -0
- package/src/lib/hooks/use-deals.js.map +1 -0
- package/src/lib/hooks/use-org-leads.d.ts +53 -0
- package/src/lib/hooks/use-org-leads.js +114 -0
- package/src/lib/hooks/use-org-leads.js.map +1 -0
- package/src/lib/hooks/use-org-member-directory.d.ts +36 -0
- package/src/lib/hooks/use-org-member-directory.js +116 -0
- package/src/lib/hooks/use-org-member-directory.js.map +1 -0
- package/src/lib/hooks/use-org-member-options.d.ts +38 -0
- package/src/lib/hooks/use-org-member-options.js +131 -0
- package/src/lib/hooks/use-org-member-options.js.map +1 -0
- package/src/lib/hooks/use-pipeline.d.ts +71 -0
- package/src/lib/hooks/use-pipeline.js +159 -0
- package/src/lib/hooks/use-pipeline.js.map +1 -0
- package/src/lib/model/companies-bulk-writes.d.ts +40 -0
- package/src/lib/model/companies-bulk-writes.js +103 -0
- package/src/lib/model/companies-bulk-writes.js.map +1 -0
- package/src/lib/model/companies-csv.d.ts +36 -0
- package/src/lib/model/companies-csv.js +38 -0
- package/src/lib/model/companies-csv.js.map +1 -0
- package/src/lib/model/companies.d.ts +99 -0
- package/src/lib/model/companies.js +168 -0
- package/src/lib/model/companies.js.map +1 -0
- package/src/lib/model/company-delete-route.d.ts +43 -0
- package/src/lib/model/company-delete-route.js +31 -0
- package/src/lib/model/company-delete-route.js.map +1 -0
- package/src/lib/model/company-delete.d.ts +42 -0
- package/src/lib/model/company-delete.js +52 -0
- package/src/lib/model/company-delete.js.map +1 -0
- package/src/lib/model/contact-duplicates.d.ts +58 -0
- package/src/lib/model/contact-duplicates.js +67 -0
- package/src/lib/model/contact-duplicates.js.map +1 -0
- package/src/lib/model/contact-record.d.ts +113 -0
- package/src/lib/model/contact-record.js +70 -0
- package/src/lib/model/contact-record.js.map +1 -0
- package/src/lib/model/contact-update.d.ts +93 -0
- package/src/lib/model/contact-update.js +50 -0
- package/src/lib/model/contact-update.js.map +1 -0
- package/src/lib/model/contacts-bulk-writes.d.ts +173 -0
- package/src/lib/model/contacts-bulk-writes.js +196 -0
- package/src/lib/model/contacts-bulk-writes.js.map +1 -0
- package/src/lib/model/contacts-csv.d.ts +54 -0
- package/src/lib/model/contacts-csv.js +67 -0
- package/src/lib/model/contacts-csv.js.map +1 -0
- package/src/lib/model/contacts-list-seed.d.ts +51 -0
- package/src/lib/model/contacts-list-seed.js +63 -0
- package/src/lib/model/contacts-list-seed.js.map +1 -0
- package/src/lib/model/crm-activity-report.d.ts +27 -0
- package/src/lib/model/crm-activity-report.js +56 -0
- package/src/lib/model/crm-activity-report.js.map +1 -0
- package/src/lib/model/crm-api.d.ts +49 -0
- package/src/lib/model/crm-api.js +47 -0
- package/src/lib/model/crm-api.js.map +1 -0
- package/src/lib/model/crm-bulk-writes.d.ts +147 -0
- package/src/lib/model/crm-bulk-writes.js +207 -0
- package/src/lib/model/crm-bulk-writes.js.map +1 -0
- package/src/lib/model/crm-company-import.d.ts +154 -0
- package/src/lib/model/crm-company-import.js +331 -0
- package/src/lib/model/crm-company-import.js.map +1 -0
- package/src/lib/model/crm-custom-draft.d.ts +62 -0
- package/src/lib/model/crm-custom-draft.js +67 -0
- package/src/lib/model/crm-custom-draft.js.map +1 -0
- package/src/lib/model/crm-deal-import.d.ts +112 -0
- package/src/lib/model/crm-deal-import.js +263 -0
- package/src/lib/model/crm-deal-import.js.map +1 -0
- package/src/lib/model/crm-import.d.ts +244 -0
- package/src/lib/model/crm-import.js +466 -0
- package/src/lib/model/crm-import.js.map +1 -0
- package/src/lib/model/crm-lead-import.d.ts +105 -0
- package/src/lib/model/crm-lead-import.js +255 -0
- package/src/lib/model/crm-lead-import.js.map +1 -0
- package/src/lib/model/crm-record-routes.d.ts +21 -0
- package/src/lib/model/crm-record-routes.js +70 -0
- package/src/lib/model/crm-record-routes.js.map +1 -0
- package/src/lib/model/crm-routes.d.ts +101 -0
- package/src/lib/model/crm-routes.js +92 -0
- package/src/lib/model/crm-routes.js.map +1 -0
- package/src/lib/model/crm-task-import.d.ts +94 -0
- package/src/lib/model/crm-task-import.js +275 -0
- package/src/lib/model/crm-task-import.js.map +1 -0
- package/src/lib/model/crm-view-param.d.ts +43 -0
- package/src/lib/model/crm-view-param.js +49 -0
- package/src/lib/model/crm-view-param.js.map +1 -0
- package/src/lib/model/deal-board-model.d.ts +241 -0
- package/src/lib/model/deal-board-model.js +439 -0
- package/src/lib/model/deal-board-model.js.map +1 -0
- package/src/lib/model/deal-form-model.d.ts +114 -0
- package/src/lib/model/deal-form-model.js +218 -0
- package/src/lib/model/deal-form-model.js.map +1 -0
- package/src/lib/model/deals-csv.d.ts +32 -0
- package/src/lib/model/deals-csv.js +37 -0
- package/src/lib/model/deals-csv.js.map +1 -0
- package/src/lib/model/import-column-shapes.d.ts +36 -0
- package/src/lib/model/import-column-shapes.js +76 -0
- package/src/lib/model/import-column-shapes.js.map +1 -0
- package/src/lib/model/lead-company-suggestion.d.ts +61 -0
- package/src/lib/model/lead-company-suggestion.js +65 -0
- package/src/lib/model/lead-company-suggestion.js.map +1 -0
- package/src/lib/model/lead-filters.d.ts +29 -0
- package/src/lib/model/lead-filters.js +39 -0
- package/src/lib/model/lead-filters.js.map +1 -0
- package/src/lib/model/lead-surfaces.d.ts +58 -0
- package/src/lib/model/lead-surfaces.js +67 -0
- package/src/lib/model/lead-surfaces.js.map +1 -0
- package/src/lib/model/leads-csv.d.ts +40 -0
- package/src/lib/model/leads-csv.js +40 -0
- package/src/lib/model/leads-csv.js.map +1 -0
- package/src/lib/model/next-activity-api.d.ts +31 -0
- package/src/lib/model/next-activity-api.js +57 -0
- package/src/lib/model/next-activity-api.js.map +1 -0
- package/src/lib/model/next-activity.d.ts +64 -0
- package/src/lib/model/next-activity.js +47 -0
- package/src/lib/model/next-activity.js.map +1 -0
- package/src/lib/model/person-key-web.d.ts +43 -0
- package/src/lib/model/person-key-web.js +52 -0
- package/src/lib/model/person-key-web.js.map +1 -0
- package/src/lib/model/record-facts.d.ts +282 -0
- package/src/lib/model/record-facts.js +434 -0
- package/src/lib/model/record-facts.js.map +1 -0
- package/src/lib/model/task-api.d.ts +28 -0
- package/src/lib/model/task-api.js +57 -0
- package/src/lib/model/task-api.js.map +1 -0
- package/src/lib/model/task-calendar.d.ts +108 -0
- package/src/lib/model/task-calendar.js +139 -0
- package/src/lib/model/task-calendar.js.map +1 -0
- package/src/lib/model/task-routes.d.ts +177 -0
- package/src/lib/model/task-routes.js +197 -0
- package/src/lib/model/task-routes.js.map +1 -0
- package/src/lib/model/task-scope.d.ts +45 -0
- package/src/lib/model/task-scope.js +51 -0
- package/src/lib/model/task-scope.js.map +1 -0
- package/src/lib/model/task-views.d.ts +149 -0
- package/src/lib/model/task-views.js +286 -0
- package/src/lib/model/task-views.js.map +1 -0
- package/src/lib/model/tasks-csv.d.ts +28 -0
- package/src/lib/model/tasks-csv.js +28 -0
- package/src/lib/model/tasks-csv.js.map +1 -0
- package/src/lib/plugin.d.ts +32 -0
- package/src/lib/plugin.js +208 -0
- package/src/lib/plugin.js.map +1 -0
- package/src/lib/server/companies-import.d.ts +57 -0
- package/src/lib/server/companies-import.js +242 -0
- package/src/lib/server/companies-import.js.map +1 -0
- package/src/lib/server/company-delete.d.ts +59 -0
- package/src/lib/server/company-delete.js +146 -0
- package/src/lib/server/company-delete.js.map +1 -0
- package/src/lib/server/contact-email-history.d.ts +82 -0
- package/src/lib/server/contact-email-history.js +264 -0
- package/src/lib/server/contact-email-history.js.map +1 -0
- package/src/lib/server/contact-profile.d.ts +41 -0
- package/src/lib/server/contact-profile.js +45 -0
- package/src/lib/server/contact-profile.js.map +1 -0
- package/src/lib/server/contact-update.d.ts +92 -0
- package/src/lib/server/contact-update.js +512 -0
- package/src/lib/server/contact-update.js.map +1 -0
- package/src/lib/server/contacts-import.d.ts +73 -0
- package/src/lib/server/contacts-import.js +263 -0
- package/src/lib/server/contacts-import.js.map +1 -0
- package/src/lib/server/contacts-merge.d.ts +86 -0
- package/src/lib/server/contacts-merge.js +206 -0
- package/src/lib/server/contacts-merge.js.map +1 -0
- package/src/lib/server/deals-import.d.ts +76 -0
- package/src/lib/server/deals-import.js +246 -0
- package/src/lib/server/deals-import.js.map +1 -0
- package/src/lib/server/email-send.d.ts +119 -0
- package/src/lib/server/email-send.js +667 -0
- package/src/lib/server/email-send.js.map +1 -0
- package/src/lib/server/email-template-duplicate.d.ts +19 -0
- package/src/lib/server/email-template-duplicate.js +206 -0
- package/src/lib/server/email-template-duplicate.js.map +1 -0
- package/src/lib/server/erase-person.d.ts +108 -0
- package/src/lib/server/erase-person.js +309 -0
- package/src/lib/server/erase-person.js.map +1 -0
- package/src/lib/server/import-context.d.ts +85 -0
- package/src/lib/server/import-context.js +181 -0
- package/src/lib/server/import-context.js.map +1 -0
- package/src/lib/server/inbound-address.d.ts +61 -0
- package/src/lib/server/inbound-address.js +188 -0
- package/src/lib/server/inbound-address.js.map +1 -0
- package/src/lib/server/lead-convert.d.ts +78 -0
- package/src/lib/server/lead-convert.js +250 -0
- package/src/lib/server/lead-convert.js.map +1 -0
- package/src/lib/server/leads-import.d.ts +84 -0
- package/src/lib/server/leads-import.js +261 -0
- package/src/lib/server/leads-import.js.map +1 -0
- package/src/lib/server/next-activity-routes.d.ts +33 -0
- package/src/lib/server/next-activity-routes.js +110 -0
- package/src/lib/server/next-activity-routes.js.map +1 -0
- package/src/lib/server/org-activity.d.ts +61 -0
- package/src/lib/server/org-activity.js +120 -0
- package/src/lib/server/org-activity.js.map +1 -0
- package/src/lib/server/org-caller.d.ts +110 -0
- package/src/lib/server/org-caller.js +154 -0
- package/src/lib/server/org-caller.js.map +1 -0
- package/src/lib/server/recipe-routes.d.ts +75 -0
- package/src/lib/server/recipe-routes.js +442 -0
- package/src/lib/server/recipe-routes.js.map +1 -0
- package/src/lib/server/record-facts.d.ts +65 -0
- package/src/lib/server/record-facts.js +337 -0
- package/src/lib/server/record-facts.js.map +1 -0
- package/src/lib/server/record-timeline.d.ts +51 -0
- package/src/lib/server/record-timeline.js +215 -0
- package/src/lib/server/record-timeline.js.map +1 -0
- package/src/lib/server/suite-gate.d.ts +42 -0
- package/src/lib/server/suite-gate.js +87 -0
- package/src/lib/server/suite-gate.js.map +1 -0
- package/src/lib/server/task-routes.d.ts +132 -0
- package/src/lib/server/task-routes.js +699 -0
- package/src/lib/server/task-routes.js.map +1 -0
- package/src/lib/server/tasks-import.d.ts +54 -0
- package/src/lib/server/tasks-import.js +157 -0
- package/src/lib/server/tasks-import.js.map +1 -0
- package/src/lib/server-deal-stage.d.ts +88 -0
- package/src/lib/server-deal-stage.js +316 -0
- package/src/lib/server-deal-stage.js.map +1 -0
- package/src/lib/server.d.ts +149 -0
- package/src/lib/server.js +615 -0
- package/src/lib/server.js.map +1 -0
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { type CrmRecordRef } from '../hooks/use-crm-tasks';
|
|
2
|
+
export interface RecordTasksCardProps extends CrmRecordRef {
|
|
3
|
+
/** The site the record is read under, or `null` at the organization level. */
|
|
4
|
+
hostId: string | null;
|
|
5
|
+
/** The org document the shell passed the page; scopes the read when present. */
|
|
6
|
+
org?: Record<string, unknown> | null;
|
|
7
|
+
/**
|
|
8
|
+
* The hub's path, for the link to the full tasks list. A page the hub
|
|
9
|
+
* rendered has one to pass; a card mounted anywhere else leaves it out and
|
|
10
|
+
* the path is rebuilt from the URL.
|
|
11
|
+
*/
|
|
12
|
+
basePath?: string;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* The open tasks for ONE contact, company or deal, on that record's page
|
|
16
|
+
* (AGL-2599).
|
|
17
|
+
*
|
|
18
|
+
* Exactly one of `contactId`, `companyId`, `dealId` names the record; the
|
|
19
|
+
* first present one wins. A record page drops this in beside its other
|
|
20
|
+
* cards: `<RecordTasksCard hostId={hostId} org={org} contactId={id} />`.
|
|
21
|
+
* Tasks are completed inline and created with the record
|
|
22
|
+
* already linked; everything else about a task is edited by opening it.
|
|
23
|
+
*
|
|
24
|
+
* Open tasks are listed and completed ones are counted, because a record's
|
|
25
|
+
* page is where somebody decides what to do next about the person, and the
|
|
26
|
+
* history of what was done lives in the Done view of the tasks section.
|
|
27
|
+
*/
|
|
28
|
+
export declare function RecordTasksCard(props: RecordTasksCardProps): import("react").JSX.Element;
|
|
29
|
+
export declare namespace RecordTasksCard {
|
|
30
|
+
var displayName: string;
|
|
31
|
+
}
|
|
32
|
+
export default RecordTasksCard;
|
|
@@ -0,0 +1,306 @@
|
|
|
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, Fragment as _Fragment } from "react/jsx-runtime";
|
|
19
|
+
import { CRM_COLLECTIONS, pluginDocsHelp } from "@aglyn/aglyn";
|
|
20
|
+
import { AppLink, CardDisplay } from "@aglyn/shared-ui-jsx";
|
|
21
|
+
import EmptyStateComponent from "@aglyn/shared-ui-jsx/components/empty-state.component";
|
|
22
|
+
import { useSnackbar } from "@aglyn/shared-ui-snackstack";
|
|
23
|
+
import { useFirestore, useUser } from "@aglyn/tenant-feature-instance";
|
|
24
|
+
import { Button, Checkbox, Stack, Typography } from "@mui/material";
|
|
25
|
+
import { deleteField, doc, serverTimestamp, updateDoc } from "firebase/firestore";
|
|
26
|
+
import { useCallback, useMemo, useState } from "react";
|
|
27
|
+
import { useCrmHubPath } from "../hooks/use-crm-hub-path.js";
|
|
28
|
+
import { useCrmRecordTasks, useNowMs } from "../hooks/use-crm-tasks.js";
|
|
29
|
+
import { useOrgMemberDirectory } from "../hooks/use-org-member-directory.js";
|
|
30
|
+
import { crmRoutes } from "../model/crm-routes.js";
|
|
31
|
+
import { refreshCrmNextActivity } from "../model/next-activity-api.js";
|
|
32
|
+
import { completeCrmTask } from "../model/task-api.js";
|
|
33
|
+
import { crmTaskCallScope } from "../model/task-routes.js";
|
|
34
|
+
import { TaskDueText, TaskKindCell, TaskPriorityChip } from "./task-cells.js";
|
|
35
|
+
import TaskEditDrawer from "./task-edit-drawer.js";
|
|
36
|
+
import TaskSnoozeMenu from "./task-snooze-menu.js";
|
|
37
|
+
/**
|
|
38
|
+
* The open tasks for ONE contact, company or deal, on that record's page
|
|
39
|
+
* (AGL-2599).
|
|
40
|
+
*
|
|
41
|
+
* Exactly one of `contactId`, `companyId`, `dealId` names the record; the
|
|
42
|
+
* first present one wins. A record page drops this in beside its other
|
|
43
|
+
* cards: `<RecordTasksCard hostId={hostId} org={org} contactId={id} />`.
|
|
44
|
+
* Tasks are completed inline and created with the record
|
|
45
|
+
* already linked; everything else about a task is edited by opening it.
|
|
46
|
+
*
|
|
47
|
+
* Open tasks are listed and completed ones are counted, because a record's
|
|
48
|
+
* page is where somebody decides what to do next about the person, and the
|
|
49
|
+
* history of what was done lives in the Done view of the tasks section.
|
|
50
|
+
*/ export function RecordTasksCard(props) {
|
|
51
|
+
const { hostId, org, basePath, contactId, companyId, dealId } = props;
|
|
52
|
+
const firestore = useFirestore();
|
|
53
|
+
const { data: user } = useUser();
|
|
54
|
+
const { enqueueSnackbar } = useSnackbar();
|
|
55
|
+
const nowMs = useNowMs();
|
|
56
|
+
const hubPath = useCrmHubPath(basePath);
|
|
57
|
+
const routes = useMemo(()=>crmRoutes(hubPath), [
|
|
58
|
+
hubPath
|
|
59
|
+
]);
|
|
60
|
+
const record = useMemo(()=>contactId ? {
|
|
61
|
+
contactId
|
|
62
|
+
} : companyId ? {
|
|
63
|
+
companyId
|
|
64
|
+
} : {
|
|
65
|
+
dealId
|
|
66
|
+
}, [
|
|
67
|
+
contactId,
|
|
68
|
+
companyId,
|
|
69
|
+
dealId
|
|
70
|
+
]);
|
|
71
|
+
const { tasks, status, fromCache, scope, orgId, readTokens } = useCrmRecordTasks({
|
|
72
|
+
hostId,
|
|
73
|
+
org,
|
|
74
|
+
record
|
|
75
|
+
});
|
|
76
|
+
const directory = useOrgMemberDirectory(orgId);
|
|
77
|
+
const open = useMemo(()=>tasks.filter((task)=>task.status !== 'done'), [
|
|
78
|
+
tasks
|
|
79
|
+
]);
|
|
80
|
+
const doneCount = tasks.length - open.length;
|
|
81
|
+
const [drawer, setDrawer] = useState({
|
|
82
|
+
open: false,
|
|
83
|
+
task: null
|
|
84
|
+
});
|
|
85
|
+
const [busyId, setBusyId] = useState(null);
|
|
86
|
+
const toggleDone = useCallback(async (task)=>{
|
|
87
|
+
if (!scope || busyId) return;
|
|
88
|
+
setBusyId(task.$id);
|
|
89
|
+
try {
|
|
90
|
+
if (task.status === 'done') {
|
|
91
|
+
await updateDoc(doc(firestore, scope[0], scope[1], CRM_COLLECTIONS.tasks, task.$id), {
|
|
92
|
+
status: 'open',
|
|
93
|
+
completedAtMs: null,
|
|
94
|
+
completedByUid: deleteField(),
|
|
95
|
+
updatedAt: serverTimestamp()
|
|
96
|
+
});
|
|
97
|
+
// A client-direct write: the records it names are told (AGL-2661).
|
|
98
|
+
await refreshCrmNextActivity(user, crmTaskCallScope(hostId, orgId), [
|
|
99
|
+
task
|
|
100
|
+
]);
|
|
101
|
+
} else {
|
|
102
|
+
// The mounted site, or at the organization level the org — whose
|
|
103
|
+
// variant emits on the task's own site, or nowhere for an org task.
|
|
104
|
+
const callScope = crmTaskCallScope(hostId, orgId);
|
|
105
|
+
if (!callScope) return;
|
|
106
|
+
await completeCrmTask(user, _extends({}, callScope, {
|
|
107
|
+
taskId: task.$id
|
|
108
|
+
}));
|
|
109
|
+
enqueueSnackbar('Task completed', {
|
|
110
|
+
variant: 'success'
|
|
111
|
+
});
|
|
112
|
+
}
|
|
113
|
+
} catch (cause) {
|
|
114
|
+
enqueueSnackbar(cause instanceof Error ? cause.message : 'The task could not be updated.', {
|
|
115
|
+
variant: 'warning'
|
|
116
|
+
});
|
|
117
|
+
} finally{
|
|
118
|
+
setBusyId(null);
|
|
119
|
+
}
|
|
120
|
+
}, [
|
|
121
|
+
scope,
|
|
122
|
+
busyId,
|
|
123
|
+
firestore,
|
|
124
|
+
user,
|
|
125
|
+
hostId,
|
|
126
|
+
orgId,
|
|
127
|
+
enqueueSnackbar
|
|
128
|
+
]);
|
|
129
|
+
return /*#__PURE__*/ _jsxs(_Fragment, {
|
|
130
|
+
children: [
|
|
131
|
+
/*#__PURE__*/ _jsx(CardDisplay, {
|
|
132
|
+
header: 'Tasks',
|
|
133
|
+
help: pluginDocsHelp('crmTasks', {
|
|
134
|
+
anchor: '#tasks-on-a-contact-company-or-deal',
|
|
135
|
+
excerpt: 'The open tasks about this record. Tick one to complete it, or ' + 'add a call, an email, a meeting or a to-do already linked here.'
|
|
136
|
+
}),
|
|
137
|
+
subheader: doneCount ? `${open.length} open · ${doneCount} done` : open.length ? `${open.length} open` : undefined,
|
|
138
|
+
contentGutterX: true,
|
|
139
|
+
contentGutterY: true,
|
|
140
|
+
HeaderProps: {
|
|
141
|
+
action: /*#__PURE__*/ _jsxs(Stack, {
|
|
142
|
+
direction: "row",
|
|
143
|
+
spacing: 1,
|
|
144
|
+
children: [
|
|
145
|
+
/*#__PURE__*/ _jsx(Button, _extends({
|
|
146
|
+
component: AppLink
|
|
147
|
+
}, {
|
|
148
|
+
componentVariant: 'naked',
|
|
149
|
+
nativeButton: false
|
|
150
|
+
}, {
|
|
151
|
+
href: routes.section('tasks'),
|
|
152
|
+
size: "small",
|
|
153
|
+
color: "primary",
|
|
154
|
+
children: 'All tasks'
|
|
155
|
+
})),
|
|
156
|
+
/*#__PURE__*/ _jsx(Button, {
|
|
157
|
+
size: "small",
|
|
158
|
+
variant: "contained",
|
|
159
|
+
color: "primary",
|
|
160
|
+
onClick: ()=>setDrawer({
|
|
161
|
+
open: true,
|
|
162
|
+
task: null
|
|
163
|
+
}),
|
|
164
|
+
children: 'New task'
|
|
165
|
+
})
|
|
166
|
+
]
|
|
167
|
+
})
|
|
168
|
+
},
|
|
169
|
+
children: status === 'error' ? /*#__PURE__*/ _jsx(Typography, {
|
|
170
|
+
variant: "body2",
|
|
171
|
+
color: "error",
|
|
172
|
+
children: 'The tasks could not be loaded.'
|
|
173
|
+
}) : status === 'success' && !open.length ? /*#__PURE__*/ _jsx(EmptyStateComponent, {
|
|
174
|
+
compact: true,
|
|
175
|
+
label: doneCount ? 'Everything here is done' : 'No tasks yet',
|
|
176
|
+
description: doneCount ? 'The completed ones are kept on the Tasks list.' : 'A call, an email, a meeting or a to-do owed to this record.',
|
|
177
|
+
action: /*#__PURE__*/ _jsx(Button, {
|
|
178
|
+
size: "small",
|
|
179
|
+
variant: "contained",
|
|
180
|
+
color: "primary",
|
|
181
|
+
onClick: ()=>setDrawer({
|
|
182
|
+
open: true,
|
|
183
|
+
task: null
|
|
184
|
+
}),
|
|
185
|
+
children: 'New task'
|
|
186
|
+
})
|
|
187
|
+
}) : /*#__PURE__*/ _jsx(Stack, {
|
|
188
|
+
spacing: 1,
|
|
189
|
+
children: open.map((task)=>/*#__PURE__*/ _jsxs(Stack, {
|
|
190
|
+
direction: "row",
|
|
191
|
+
spacing: 1,
|
|
192
|
+
sx: {
|
|
193
|
+
alignItems: 'center',
|
|
194
|
+
minWidth: 0
|
|
195
|
+
},
|
|
196
|
+
children: [
|
|
197
|
+
/*#__PURE__*/ _jsx(Checkbox, {
|
|
198
|
+
size: "small",
|
|
199
|
+
checked: false,
|
|
200
|
+
disabled: busyId === task.$id,
|
|
201
|
+
onClick: ()=>void toggleDone(task),
|
|
202
|
+
slotProps: {
|
|
203
|
+
input: {
|
|
204
|
+
'aria-label': `Complete "${task.title}"`
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
}),
|
|
208
|
+
/*#__PURE__*/ _jsxs(Stack, {
|
|
209
|
+
sx: {
|
|
210
|
+
minWidth: 0,
|
|
211
|
+
flex: 1,
|
|
212
|
+
cursor: 'pointer'
|
|
213
|
+
},
|
|
214
|
+
onClick: ()=>setDrawer({
|
|
215
|
+
open: true,
|
|
216
|
+
task
|
|
217
|
+
}),
|
|
218
|
+
children: [
|
|
219
|
+
/*#__PURE__*/ _jsxs(Stack, {
|
|
220
|
+
direction: "row",
|
|
221
|
+
spacing: 1,
|
|
222
|
+
sx: {
|
|
223
|
+
alignItems: 'center',
|
|
224
|
+
minWidth: 0
|
|
225
|
+
},
|
|
226
|
+
children: [
|
|
227
|
+
/*#__PURE__*/ _jsx(TaskKindCell, {
|
|
228
|
+
kind: task.kind,
|
|
229
|
+
iconOnly: true
|
|
230
|
+
}),
|
|
231
|
+
/*#__PURE__*/ _jsx(Typography, {
|
|
232
|
+
variant: "body2",
|
|
233
|
+
noWrap: true,
|
|
234
|
+
sx: {
|
|
235
|
+
minWidth: 0
|
|
236
|
+
},
|
|
237
|
+
children: task.title
|
|
238
|
+
}),
|
|
239
|
+
task.priority === 'high' ? /*#__PURE__*/ _jsx(TaskPriorityChip, {
|
|
240
|
+
priority: task.priority
|
|
241
|
+
}) : null
|
|
242
|
+
]
|
|
243
|
+
}),
|
|
244
|
+
/*#__PURE__*/ _jsxs(Stack, {
|
|
245
|
+
direction: "row",
|
|
246
|
+
spacing: 1,
|
|
247
|
+
sx: {
|
|
248
|
+
alignItems: 'center'
|
|
249
|
+
},
|
|
250
|
+
children: [
|
|
251
|
+
/*#__PURE__*/ _jsx(TaskDueText, {
|
|
252
|
+
task: task,
|
|
253
|
+
nowMs: nowMs,
|
|
254
|
+
variant: "caption"
|
|
255
|
+
}),
|
|
256
|
+
task.assigneeUid ? /*#__PURE__*/ _jsx(Typography, {
|
|
257
|
+
variant: "caption",
|
|
258
|
+
color: "text.secondary",
|
|
259
|
+
noWrap: true,
|
|
260
|
+
children: `· ${directory.nameOf(task.assigneeUid)}`
|
|
261
|
+
}) : null,
|
|
262
|
+
scope ? /*#__PURE__*/ _jsx(TaskSnoozeMenu, {
|
|
263
|
+
dueAtMs: task.dueAtMs,
|
|
264
|
+
remindAtMs: task.remindAtMs,
|
|
265
|
+
target: {
|
|
266
|
+
write: {
|
|
267
|
+
scope,
|
|
268
|
+
taskId: task.$id,
|
|
269
|
+
call: crmTaskCallScope(hostId, orgId),
|
|
270
|
+
links: task
|
|
271
|
+
}
|
|
272
|
+
},
|
|
273
|
+
disabled: busyId === task.$id
|
|
274
|
+
}) : null
|
|
275
|
+
]
|
|
276
|
+
})
|
|
277
|
+
]
|
|
278
|
+
})
|
|
279
|
+
]
|
|
280
|
+
}, task.$id))
|
|
281
|
+
})
|
|
282
|
+
}),
|
|
283
|
+
/*#__PURE__*/ _jsx(TaskEditDrawer, {
|
|
284
|
+
open: drawer.open,
|
|
285
|
+
onClose: ()=>setDrawer((prev)=>_extends({}, prev, {
|
|
286
|
+
open: false
|
|
287
|
+
})),
|
|
288
|
+
hostId: hostId,
|
|
289
|
+
org: org,
|
|
290
|
+
orgId: orgId,
|
|
291
|
+
scope: scope,
|
|
292
|
+
readTokens: readTokens,
|
|
293
|
+
task: drawer.task,
|
|
294
|
+
prefill: record,
|
|
295
|
+
seed: {
|
|
296
|
+
fromCache,
|
|
297
|
+
unreadable: status === 'error'
|
|
298
|
+
}
|
|
299
|
+
})
|
|
300
|
+
]
|
|
301
|
+
});
|
|
302
|
+
}
|
|
303
|
+
RecordTasksCard.displayName = 'RecordTasksCard';
|
|
304
|
+
export default RecordTasksCard;
|
|
305
|
+
|
|
306
|
+
//# sourceMappingURL=record-tasks-card.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../../../libs/plugins/crm/src/lib/components/record-tasks-card.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 { CRM_COLLECTIONS, pluginDocsHelp } from '@aglyn/aglyn'\nimport { AppLink, CardDisplay } from '@aglyn/shared-ui-jsx'\nimport EmptyStateComponent from '@aglyn/shared-ui-jsx/components/empty-state.component'\nimport { useSnackbar } from '@aglyn/shared-ui-snackstack'\nimport { useFirestore, useUser } from '@aglyn/tenant-feature-instance'\nimport { Button, Checkbox, Stack, Typography } from '@mui/material'\nimport { deleteField, doc, serverTimestamp, updateDoc } from 'firebase/firestore'\nimport { useCallback, useMemo, useState } from 'react'\nimport { useCrmHubPath } from '../hooks/use-crm-hub-path'\nimport {\n type CrmRecordRef,\n type CrmTaskRow,\n useCrmRecordTasks,\n useNowMs,\n} from '../hooks/use-crm-tasks'\nimport { useOrgMemberDirectory } from '../hooks/use-org-member-directory'\nimport { crmRoutes } from '../model/crm-routes'\nimport { refreshCrmNextActivity } from '../model/next-activity-api'\nimport { completeCrmTask } from '../model/task-api'\nimport { crmTaskCallScope } from '../model/task-routes'\nimport { TaskDueText, TaskKindCell, TaskPriorityChip } from './task-cells'\nimport TaskEditDrawer from './task-edit-drawer'\nimport TaskSnoozeMenu from './task-snooze-menu'\n\nexport interface RecordTasksCardProps extends CrmRecordRef {\n /** The site the record is read under, or `null` at the organization level. */\n hostId: string | null\n /** The org document the shell passed the page; scopes the read when present. */\n org?: Record<string, unknown> | null\n /**\n * The hub's path, for the link to the full tasks list. A page the hub\n * rendered has one to pass; a card mounted anywhere else leaves it out and\n * the path is rebuilt from the URL.\n */\n basePath?: string\n}\n\n/**\n * The open tasks for ONE contact, company or deal, on that record's page\n * (AGL-2599).\n *\n * Exactly one of `contactId`, `companyId`, `dealId` names the record; the\n * first present one wins. A record page drops this in beside its other\n * cards: `<RecordTasksCard hostId={hostId} org={org} contactId={id} />`.\n * Tasks are completed inline and created with the record\n * already linked; everything else about a task is edited by opening it.\n *\n * Open tasks are listed and completed ones are counted, because a record's\n * page is where somebody decides what to do next about the person, and the\n * history of what was done lives in the Done view of the tasks section.\n */\nexport function RecordTasksCard(props: RecordTasksCardProps) {\n const { hostId, org, basePath, contactId, companyId, dealId } = props\n const firestore = useFirestore()\n const { data: user } = useUser()\n const { enqueueSnackbar } = useSnackbar()\n const nowMs = useNowMs()\n const hubPath = useCrmHubPath(basePath)\n const routes = useMemo(() => crmRoutes(hubPath), [hubPath])\n const record = useMemo<CrmRecordRef>(\n () =>\n contactId ? { contactId } : companyId ? { companyId } : { dealId },\n [contactId, companyId, dealId],\n )\n const { tasks, status, fromCache, scope, orgId, readTokens } = useCrmRecordTasks({\n hostId,\n org,\n record,\n })\n const directory = useOrgMemberDirectory(orgId)\n const open = useMemo(() => tasks.filter((task) => task.status !== 'done'), [tasks])\n const doneCount = tasks.length - open.length\n\n const [drawer, setDrawer] = useState<{ open: boolean; task: CrmTaskRow | null }>({\n open: false,\n task: null,\n })\n const [busyId, setBusyId] = useState<string | null>(null)\n\n const toggleDone = useCallback(\n async (task: CrmTaskRow) => {\n if (!scope || busyId) return\n setBusyId(task.$id)\n try {\n if (task.status === 'done') {\n await updateDoc(\n doc(firestore, scope[0], scope[1], CRM_COLLECTIONS.tasks, task.$id),\n {\n status: 'open',\n completedAtMs: null,\n completedByUid: deleteField(),\n updatedAt: serverTimestamp(),\n },\n )\n // A client-direct write: the records it names are told (AGL-2661).\n await refreshCrmNextActivity(user, crmTaskCallScope(hostId, orgId), [task])\n } else {\n // The mounted site, or at the organization level the org — whose\n // variant emits on the task's own site, or nowhere for an org task.\n const callScope = crmTaskCallScope(hostId, orgId)\n if (!callScope) return\n await completeCrmTask(user, { ...callScope, taskId: task.$id })\n enqueueSnackbar('Task completed', { variant: 'success' })\n }\n } catch (cause) {\n enqueueSnackbar(\n cause instanceof Error ? cause.message : 'The task could not be updated.',\n { variant: 'warning' },\n )\n } finally {\n setBusyId(null)\n }\n },\n [scope, busyId, firestore, user, hostId, orgId, enqueueSnackbar],\n )\n\n return (\n <>\n <CardDisplay\n header={'Tasks'}\n help={pluginDocsHelp('crmTasks', {\n anchor: '#tasks-on-a-contact-company-or-deal',\n excerpt:\n 'The open tasks about this record. Tick one to complete it, or ' +\n 'add a call, an email, a meeting or a to-do already linked here.',\n })}\n subheader={\n doneCount\n ? `${open.length} open · ${doneCount} done`\n : open.length\n ? `${open.length} open`\n : undefined\n }\n contentGutterX\n contentGutterY\n HeaderProps={{\n action: (\n <Stack direction=\"row\" spacing={1}>\n <Button\n component={AppLink as any}\n {...({ componentVariant: 'naked', nativeButton: false } as any)}\n href={routes.section('tasks')}\n size=\"small\"\n color=\"primary\"\n >\n {'All tasks'}\n </Button>\n <Button\n size=\"small\"\n variant=\"contained\"\n color=\"primary\"\n onClick={() => setDrawer({ open: true, task: null })}\n >\n {'New task'}\n </Button>\n </Stack>\n ),\n }}\n >\n {status === 'error' ? (\n <Typography variant=\"body2\" color=\"error\">\n {'The tasks could not be loaded.'}\n </Typography>\n ) : status === 'success' && !open.length ? (\n <EmptyStateComponent\n compact\n label={doneCount ? 'Everything here is done' : 'No tasks yet'}\n description={\n doneCount\n ? 'The completed ones are kept on the Tasks list.'\n : 'A call, an email, a meeting or a to-do owed to this record.'\n }\n action={\n <Button\n size=\"small\"\n variant=\"contained\"\n color=\"primary\"\n onClick={() => setDrawer({ open: true, task: null })}\n >\n {'New task'}\n </Button>\n }\n />\n ) : (\n <Stack spacing={1}>\n {open.map((task) => (\n <Stack\n key={task.$id}\n direction=\"row\"\n spacing={1}\n sx={{ alignItems: 'center', minWidth: 0 }}\n >\n <Checkbox\n size=\"small\"\n checked={false}\n disabled={busyId === task.$id}\n onClick={() => void toggleDone(task)}\n slotProps={{\n input: { 'aria-label': `Complete \"${task.title}\"` },\n }}\n />\n <Stack\n sx={{ minWidth: 0, flex: 1, cursor: 'pointer' }}\n onClick={() => setDrawer({ open: true, task })}\n >\n <Stack direction=\"row\" spacing={1} sx={{ alignItems: 'center', minWidth: 0 }}>\n <TaskKindCell kind={task.kind} iconOnly />\n <Typography variant=\"body2\" noWrap sx={{ minWidth: 0 }}>\n {task.title}\n </Typography>\n {task.priority === 'high' ? (\n <TaskPriorityChip priority={task.priority} />\n ) : null}\n </Stack>\n <Stack direction=\"row\" spacing={1} sx={{ alignItems: 'center' }}>\n <TaskDueText task={task} nowMs={nowMs} variant=\"caption\" />\n {task.assigneeUid ? (\n <Typography variant=\"caption\" color=\"text.secondary\" noWrap>\n {`· ${directory.nameOf(task.assigneeUid)}`}\n </Typography>\n ) : null}\n {scope ? (\n <TaskSnoozeMenu\n dueAtMs={task.dueAtMs}\n remindAtMs={task.remindAtMs}\n target={{\n write: {\n scope,\n taskId: task.$id,\n call: crmTaskCallScope(hostId, orgId),\n links: task,\n },\n }}\n disabled={busyId === task.$id}\n />\n ) : null}\n </Stack>\n </Stack>\n </Stack>\n ))}\n </Stack>\n )}\n </CardDisplay>\n <TaskEditDrawer\n open={drawer.open}\n onClose={() => setDrawer((prev) => ({ ...prev, open: false }))}\n hostId={hostId}\n org={org}\n orgId={orgId}\n scope={scope}\n readTokens={readTokens}\n task={drawer.task}\n prefill={record}\n seed={{ fromCache, unreadable: status === 'error' }}\n />\n </>\n )\n}\nRecordTasksCard.displayName = 'RecordTasksCard'\n\nexport default RecordTasksCard\n"],"names":["CRM_COLLECTIONS","pluginDocsHelp","AppLink","CardDisplay","EmptyStateComponent","useSnackbar","useFirestore","useUser","Button","Checkbox","Stack","Typography","deleteField","doc","serverTimestamp","updateDoc","useCallback","useMemo","useState","useCrmHubPath","useCrmRecordTasks","useNowMs","useOrgMemberDirectory","crmRoutes","refreshCrmNextActivity","completeCrmTask","crmTaskCallScope","TaskDueText","TaskKindCell","TaskPriorityChip","TaskEditDrawer","TaskSnoozeMenu","RecordTasksCard","props","hostId","org","basePath","contactId","companyId","dealId","firestore","data","user","enqueueSnackbar","nowMs","hubPath","routes","record","tasks","status","fromCache","scope","orgId","readTokens","directory","open","filter","task","doneCount","length","drawer","setDrawer","busyId","setBusyId","toggleDone","$id","completedAtMs","completedByUid","updatedAt","callScope","taskId","variant","cause","Error","message","header","help","anchor","excerpt","subheader","undefined","contentGutterX","contentGutterY","HeaderProps","action","direction","spacing","component","componentVariant","nativeButton","href","section","size","color","onClick","compact","label","description","map","sx","alignItems","minWidth","checked","disabled","slotProps","input","title","flex","cursor","kind","iconOnly","noWrap","priority","assigneeUid","nameOf","dueAtMs","remindAtMs","target","write","call","links","onClose","prev","prefill","seed","unreadable","displayName"],"mappings":"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"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { type CrmReportScope } from './report-scope';
|
|
2
|
+
export interface ActivityCardProps {
|
|
3
|
+
report: CrmReportScope;
|
|
4
|
+
}
|
|
5
|
+
/**
|
|
6
|
+
* Activity by teammate (AGL-2624): the calls, emails, meetings and notes
|
|
7
|
+
* each member logged in the period, and the tasks they ticked off,
|
|
8
|
+
* busiest first.
|
|
9
|
+
*
|
|
10
|
+
* ## Two windows, two indexes, one table
|
|
11
|
+
*
|
|
12
|
+
* Activities are counted within the period on `atMs`; completed tasks are
|
|
13
|
+
* counted the same way on `completedAtMs`, under `status == 'done'`. Each
|
|
14
|
+
* count is also drawn as a window, newest first, for the leaderboard.
|
|
15
|
+
*
|
|
16
|
+
* ## Why that is four indexes and not one
|
|
17
|
+
*
|
|
18
|
+
* The counts and the windows do not share an index, and neither do the two
|
|
19
|
+
* audiences.
|
|
20
|
+
*
|
|
21
|
+
* A COUNT here names no `orderBy`. Firestore then orders implicitly by the
|
|
22
|
+
* range field, ASCENDING, so a count wants `completedAtMs` ascending — while
|
|
23
|
+
* the window beside it asks for `desc` explicitly and wants the descending
|
|
24
|
+
* one. A composite index serves one direction or its exact reverse, never
|
|
25
|
+
* both, so declaring only the direction the window reads leaves the count
|
|
26
|
+
* with nothing: `FAILED_PRECONDITION`, one column of dashes, and a card that
|
|
27
|
+
* otherwise looks fine.
|
|
28
|
+
*
|
|
29
|
+
* Then the visibility clause doubles it. `visibleToClause` contributes
|
|
30
|
+
* nothing when the reader's tokens are null, which is every organization-level
|
|
31
|
+
* read, so the shape arriving at Firestore has no leading array field — a
|
|
32
|
+
* different index, not a prefix of the one with it. `(visibleTo, status,
|
|
33
|
+
* completedAtMs)` serves a site and `(status, completedAtMs)` the org above
|
|
34
|
+
* it; one without the other is a card that works for exactly one audience.
|
|
35
|
+
*
|
|
36
|
+
* The two reads are independent so that a missing task index degrades ONE
|
|
37
|
+
* column to a dash and a notice rather than the whole card: the activities
|
|
38
|
+
* were read, and the leaderboard draws them.
|
|
39
|
+
*
|
|
40
|
+
* A task ordered by `completedAtMs` is a task the complete route stamped;
|
|
41
|
+
* a task marked done some other way, without the stamp, is not in the
|
|
42
|
+
* window and the caption says what the column is grouped from.
|
|
43
|
+
*
|
|
44
|
+
* ## Names
|
|
45
|
+
*
|
|
46
|
+
* Every activity carries the name it was signed with, for the reason
|
|
47
|
+
* `CrmActivity.byName` gives — a scoped reader cannot resolve a colleague's
|
|
48
|
+
* uid. The roster is read too, through the members route any member may
|
|
49
|
+
* ask, and wins when it knows the uid, so a renamed teammate reads by
|
|
50
|
+
* their current name; the signed name covers a uid the roster no longer
|
|
51
|
+
* has, and the uid itself covers the rest.
|
|
52
|
+
*/
|
|
53
|
+
export declare function ActivityCard(props: ActivityCardProps): import("react").JSX.Element;
|
|
54
|
+
export declare namespace ActivityCard {
|
|
55
|
+
var displayName: string;
|
|
56
|
+
}
|
|
57
|
+
export default ActivityCard;
|