@kelpie/ui 0.7.0 → 0.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/api/resource.d.ts +59 -6
- package/dist/api/resource.d.ts.map +1 -1
- package/dist/api/resource.js +106 -24
- package/dist/api/resource.js.map +1 -1
- package/dist/api/resources/companies.d.ts +2 -0
- package/dist/api/resources/companies.d.ts.map +1 -1
- package/dist/api/resources/companies.js +5 -1
- package/dist/api/resources/companies.js.map +1 -1
- package/dist/api/resources/consentPurposes.d.ts +13 -0
- package/dist/api/resources/consentPurposes.d.ts.map +1 -0
- package/dist/api/resources/consentPurposes.js +39 -0
- package/dist/api/resources/consentPurposes.js.map +1 -0
- package/dist/api/resources/customFields.d.ts +15 -0
- package/dist/api/resources/customFields.d.ts.map +1 -0
- package/dist/api/resources/customFields.js +41 -0
- package/dist/api/resources/customFields.js.map +1 -0
- package/dist/api/resources/decisions.d.ts +2 -0
- package/dist/api/resources/decisions.d.ts.map +1 -1
- package/dist/api/resources/decisions.js +1 -0
- package/dist/api/resources/decisions.js.map +1 -1
- package/dist/api/resources/emailDomainLinker.d.ts +16 -0
- package/dist/api/resources/emailDomainLinker.d.ts.map +1 -0
- package/dist/api/resources/emailDomainLinker.js +16 -0
- package/dist/api/resources/emailDomainLinker.js.map +1 -0
- package/dist/api/resources/enquiries.d.ts +39 -0
- package/dist/api/resources/enquiries.d.ts.map +1 -0
- package/dist/api/resources/enquiries.js +68 -0
- package/dist/api/resources/enquiries.js.map +1 -0
- package/dist/api/resources/forms.d.ts +21 -1
- package/dist/api/resources/forms.d.ts.map +1 -1
- package/dist/api/resources/forms.js +44 -17
- package/dist/api/resources/forms.js.map +1 -1
- package/dist/api/resources/handbookPages.d.ts +1 -1
- package/dist/api/resources/handbookPages.js +1 -1
- package/dist/api/resources/importJobs.d.ts +5 -0
- package/dist/api/resources/importJobs.d.ts.map +1 -1
- package/dist/api/resources/importJobs.js +3 -0
- package/dist/api/resources/importJobs.js.map +1 -1
- package/dist/api/resources/listMembers.d.ts +27 -0
- package/dist/api/resources/listMembers.d.ts.map +1 -0
- package/dist/api/resources/listMembers.js +108 -0
- package/dist/api/resources/listMembers.js.map +1 -0
- package/dist/api/resources/lists.d.ts +14 -0
- package/dist/api/resources/lists.d.ts.map +1 -0
- package/dist/api/resources/lists.js +34 -0
- package/dist/api/resources/lists.js.map +1 -0
- package/dist/api/resources/opportunities.d.ts +2 -0
- package/dist/api/resources/opportunities.d.ts.map +1 -1
- package/dist/api/resources/opportunities.js +1 -0
- package/dist/api/resources/opportunities.js.map +1 -1
- package/dist/api/resources/people.d.ts.map +1 -1
- package/dist/api/resources/people.js +4 -1
- package/dist/api/resources/people.js.map +1 -1
- package/dist/api/resources/roles.d.ts +2 -0
- package/dist/api/resources/roles.d.ts.map +1 -1
- package/dist/api/resources/roles.js +1 -1
- package/dist/api/resources/roles.js.map +1 -1
- package/dist/api/resources/sampleData.d.ts +17 -0
- package/dist/api/resources/sampleData.d.ts.map +1 -0
- package/dist/api/resources/sampleData.js +31 -0
- package/dist/api/resources/sampleData.js.map +1 -0
- package/dist/api/resources/webhooks.d.ts.map +1 -1
- package/dist/api/resources/webhooks.js +7 -22
- package/dist/api/resources/webhooks.js.map +1 -1
- package/dist/app/KelpieApp.d.ts.map +1 -1
- package/dist/app/KelpieApp.js +9 -1
- package/dist/app/KelpieApp.js.map +1 -1
- package/dist/components/ActivitiesPanel.d.ts.map +1 -1
- package/dist/components/ActivitiesPanel.js +3 -1
- package/dist/components/ActivitiesPanel.js.map +1 -1
- package/dist/components/ColumnPicker.d.ts +24 -0
- package/dist/components/ColumnPicker.d.ts.map +1 -0
- package/dist/components/ColumnPicker.js +56 -0
- package/dist/components/ColumnPicker.js.map +1 -0
- package/dist/components/CustomFieldsPanel.d.ts +23 -0
- package/dist/components/CustomFieldsPanel.d.ts.map +1 -0
- package/dist/components/CustomFieldsPanel.js +116 -0
- package/dist/components/CustomFieldsPanel.js.map +1 -0
- package/dist/components/DataTable.d.ts +16 -1
- package/dist/components/DataTable.d.ts.map +1 -1
- package/dist/components/DataTable.js +51 -10
- package/dist/components/DataTable.js.map +1 -1
- package/dist/components/DecisionsPanel.d.ts.map +1 -1
- package/dist/components/DecisionsPanel.js +4 -3
- package/dist/components/DecisionsPanel.js.map +1 -1
- package/dist/components/EntitySearch.d.ts.map +1 -1
- package/dist/components/EntitySearch.js +11 -5
- package/dist/components/EntitySearch.js.map +1 -1
- package/dist/components/FormsPanel.d.ts +18 -0
- package/dist/components/FormsPanel.d.ts.map +1 -0
- package/dist/components/FormsPanel.js +37 -0
- package/dist/components/FormsPanel.js.map +1 -0
- package/dist/components/ListsPanel.d.ts +14 -0
- package/dist/components/ListsPanel.d.ts.map +1 -0
- package/dist/components/ListsPanel.js +56 -0
- package/dist/components/ListsPanel.js.map +1 -0
- package/dist/components/NotesPanel.d.ts.map +1 -1
- package/dist/components/NotesPanel.js +6 -5
- package/dist/components/NotesPanel.js.map +1 -1
- package/dist/components/Paginator.d.ts +26 -0
- package/dist/components/Paginator.d.ts.map +1 -0
- package/dist/components/Paginator.js +16 -0
- package/dist/components/Paginator.js.map +1 -0
- package/dist/components/PlanAttention.d.ts +3 -2
- package/dist/components/PlanAttention.d.ts.map +1 -1
- package/dist/components/PlanAttention.js +7 -3
- package/dist/components/PlanAttention.js.map +1 -1
- package/dist/components/PlanPanel.d.ts.map +1 -1
- package/dist/components/PlanPanel.js +2 -1
- package/dist/components/PlanPanel.js.map +1 -1
- package/dist/components/Shell.d.ts.map +1 -1
- package/dist/components/Shell.js +4 -0
- package/dist/components/Shell.js.map +1 -1
- package/dist/components/useHasCustomFields.d.ts +13 -0
- package/dist/components/useHasCustomFields.d.ts.map +1 -0
- package/dist/components/useHasCustomFields.js +16 -0
- package/dist/components/useHasCustomFields.js.map +1 -0
- package/dist/index.d.ts +8 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -1
- package/dist/index.js.map +1 -1
- package/dist/lib/listView.d.ts +15 -0
- package/dist/lib/listView.d.ts.map +1 -0
- package/dist/lib/listView.js +66 -0
- package/dist/lib/listView.js.map +1 -0
- package/dist/lib/sort.d.ts +43 -0
- package/dist/lib/sort.d.ts.map +1 -0
- package/dist/lib/sort.js +102 -0
- package/dist/lib/sort.js.map +1 -0
- package/dist/pages/CompaniesPage.d.ts.map +1 -1
- package/dist/pages/CompaniesPage.js +88 -3
- package/dist/pages/CompaniesPage.js.map +1 -1
- package/dist/pages/CompanyDetail.d.ts.map +1 -1
- package/dist/pages/CompanyDetail.js +40 -15
- package/dist/pages/CompanyDetail.js.map +1 -1
- package/dist/pages/DealDetail.d.ts.map +1 -1
- package/dist/pages/DealDetail.js +20 -1
- package/dist/pages/DealDetail.js.map +1 -1
- package/dist/pages/DealsPage.d.ts.map +1 -1
- package/dist/pages/DealsPage.js +134 -14
- package/dist/pages/DealsPage.js.map +1 -1
- package/dist/pages/DecisionsPage.d.ts.map +1 -1
- package/dist/pages/DecisionsPage.js +52 -8
- package/dist/pages/DecisionsPage.js.map +1 -1
- package/dist/pages/EnquiriesPage.d.ts +2 -0
- package/dist/pages/EnquiriesPage.d.ts.map +1 -0
- package/dist/pages/EnquiriesPage.js +251 -0
- package/dist/pages/EnquiriesPage.js.map +1 -0
- package/dist/pages/EnquiryDetail.d.ts +2 -0
- package/dist/pages/EnquiryDetail.d.ts.map +1 -0
- package/dist/pages/EnquiryDetail.js +207 -0
- package/dist/pages/EnquiryDetail.js.map +1 -0
- package/dist/pages/EnquiryStageSettingsPage.d.ts +3 -0
- package/dist/pages/EnquiryStageSettingsPage.d.ts.map +1 -0
- package/dist/pages/EnquiryStageSettingsPage.js +34 -0
- package/dist/pages/EnquiryStageSettingsPage.js.map +1 -0
- package/dist/pages/FormDetail.d.ts.map +1 -1
- package/dist/pages/FormDetail.js +19 -1
- package/dist/pages/FormDetail.js.map +1 -1
- package/dist/pages/FormsPage.d.ts.map +1 -1
- package/dist/pages/FormsPage.js +53 -2
- package/dist/pages/FormsPage.js.map +1 -1
- package/dist/pages/FundraisingPage.d.ts.map +1 -1
- package/dist/pages/FundraisingPage.js +116 -14
- package/dist/pages/FundraisingPage.js.map +1 -1
- package/dist/pages/HiringPage.d.ts.map +1 -1
- package/dist/pages/HiringPage.js +27 -4
- package/dist/pages/HiringPage.js.map +1 -1
- package/dist/pages/ListDetail.d.ts +11 -0
- package/dist/pages/ListDetail.d.ts.map +1 -0
- package/dist/pages/ListDetail.js +214 -0
- package/dist/pages/ListDetail.js.map +1 -0
- package/dist/pages/ListsPage.d.ts +9 -0
- package/dist/pages/ListsPage.d.ts.map +1 -0
- package/dist/pages/ListsPage.js +125 -0
- package/dist/pages/ListsPage.js.map +1 -0
- package/dist/pages/OpportunitiesPage.d.ts.map +1 -1
- package/dist/pages/OpportunitiesPage.js +97 -14
- package/dist/pages/OpportunitiesPage.js.map +1 -1
- package/dist/pages/OpportunityDetail.d.ts.map +1 -1
- package/dist/pages/OpportunityDetail.js +64 -3
- package/dist/pages/OpportunityDetail.js.map +1 -1
- package/dist/pages/PartnershipDetail.d.ts.map +1 -1
- package/dist/pages/PartnershipDetail.js +19 -1
- package/dist/pages/PartnershipDetail.js.map +1 -1
- package/dist/pages/PartnershipsPage.d.ts.map +1 -1
- package/dist/pages/PartnershipsPage.js +111 -14
- package/dist/pages/PartnershipsPage.js.map +1 -1
- package/dist/pages/PeoplePage.d.ts.map +1 -1
- package/dist/pages/PeoplePage.js +119 -3
- package/dist/pages/PeoplePage.js.map +1 -1
- package/dist/pages/PersonDetail.d.ts.map +1 -1
- package/dist/pages/PersonDetail.js +67 -5
- package/dist/pages/PersonDetail.js.map +1 -1
- package/dist/pages/PlanningPage.d.ts.map +1 -1
- package/dist/pages/PlanningPage.js +88 -17
- package/dist/pages/PlanningPage.js.map +1 -1
- package/dist/pages/RaiseDetail.d.ts.map +1 -1
- package/dist/pages/RaiseDetail.js +13 -1
- package/dist/pages/RaiseDetail.js.map +1 -1
- package/dist/pages/RoleDetail.d.ts.map +1 -1
- package/dist/pages/RoleDetail.js +5 -4
- package/dist/pages/RoleDetail.js.map +1 -1
- package/dist/pages/SearchPage.d.ts.map +1 -1
- package/dist/pages/SearchPage.js +1 -0
- package/dist/pages/SearchPage.js.map +1 -1
- package/dist/pages/admin/DataPage.d.ts.map +1 -1
- package/dist/pages/admin/DataPage.js +126 -13
- package/dist/pages/admin/DataPage.js.map +1 -1
- package/dist/pages/admin/FieldsPage.d.ts +2 -0
- package/dist/pages/admin/FieldsPage.d.ts.map +1 -0
- package/dist/pages/admin/FieldsPage.js +164 -0
- package/dist/pages/admin/FieldsPage.js.map +1 -0
- package/dist/pages/admin/PrivacyPage.d.ts +9 -0
- package/dist/pages/admin/PrivacyPage.d.ts.map +1 -0
- package/dist/pages/admin/PrivacyPage.js +170 -0
- package/dist/pages/admin/PrivacyPage.js.map +1 -0
- package/dist/pages/admin/WebhookDeliveries.d.ts.map +1 -1
- package/dist/pages/admin/WebhookDeliveries.js +3 -2
- package/dist/pages/admin/WebhookDeliveries.js.map +1 -1
- package/dist/pages/admin/WebhooksPage.d.ts.map +1 -1
- package/dist/pages/admin/WebhooksPage.js +3 -2
- package/dist/pages/admin/WebhooksPage.js.map +1 -1
- package/dist/pages/admin/WorkspaceSettingsPage.d.ts.map +1 -1
- package/dist/pages/admin/WorkspaceSettingsPage.js +45 -2
- package/dist/pages/admin/WorkspaceSettingsPage.js.map +1 -1
- package/dist/pages/dashboard/attention.d.ts.map +1 -1
- package/dist/pages/dashboard/attention.js +3 -0
- package/dist/pages/dashboard/attention.js.map +1 -1
- package/dist/pages/forms/AddFieldMenu.d.ts +17 -0
- package/dist/pages/forms/AddFieldMenu.d.ts.map +1 -0
- package/dist/pages/forms/AddFieldMenu.js +43 -0
- package/dist/pages/forms/AddFieldMenu.js.map +1 -0
- package/dist/pages/forms/EmbedPanel.d.ts +4 -0
- package/dist/pages/forms/EmbedPanel.d.ts.map +1 -1
- package/dist/pages/forms/EmbedPanel.js +62 -3
- package/dist/pages/forms/EmbedPanel.js.map +1 -1
- package/dist/pages/forms/FieldsEditor.d.ts.map +1 -1
- package/dist/pages/forms/FieldsEditor.js +179 -36
- package/dist/pages/forms/FieldsEditor.js.map +1 -1
- package/dist/pages/forms/FormActions.d.ts +6 -0
- package/dist/pages/forms/FormActions.d.ts.map +1 -0
- package/dist/pages/forms/FormActions.js +149 -0
- package/dist/pages/forms/FormActions.js.map +1 -0
- package/dist/pages/forms/FormSettings.d.ts.map +1 -1
- package/dist/pages/forms/FormSettings.js +15 -19
- package/dist/pages/forms/FormSettings.js.map +1 -1
- package/dist/pages/forms/SubmissionDetail.d.ts +2 -0
- package/dist/pages/forms/SubmissionDetail.d.ts.map +1 -0
- package/dist/pages/forms/SubmissionDetail.js +76 -0
- package/dist/pages/forms/SubmissionDetail.js.map +1 -0
- package/dist/pages/forms/SubmissionsTable.d.ts.map +1 -1
- package/dist/pages/forms/SubmissionsTable.js +57 -8
- package/dist/pages/forms/SubmissionsTable.js.map +1 -1
- package/dist/pages/forms/fieldList.d.ts +11 -5
- package/dist/pages/forms/fieldList.d.ts.map +1 -1
- package/dist/pages/forms/fieldList.js +66 -6
- package/dist/pages/forms/fieldList.js.map +1 -1
- package/dist/pages/forms/template.d.ts +17 -0
- package/dist/pages/forms/template.d.ts.map +1 -1
- package/dist/pages/forms/template.js +93 -0
- package/dist/pages/forms/template.js.map +1 -1
- package/dist/pages/handbook/HandbookPage.js +1 -1
- package/dist/pages/hiringDirectory.js +2 -2
- package/dist/pages/onboarding/WorkspaceStepPage.d.ts.map +1 -1
- package/dist/pages/onboarding/WorkspaceStepPage.js +15 -2
- package/dist/pages/onboarding/WorkspaceStepPage.js.map +1 -1
- package/dist/pages/positionDirectory.js +2 -2
- package/package.json +2 -2
- package/src/api/resource.ts +155 -32
- package/src/api/resources/companies.ts +7 -1
- package/src/api/resources/consentPurposes.ts +83 -0
- package/src/api/resources/customFields.ts +88 -0
- package/src/api/resources/decisions.ts +3 -0
- package/src/api/resources/emailDomainLinker.ts +43 -0
- package/src/api/resources/enquiries.ts +118 -0
- package/src/api/resources/forms.ts +59 -19
- package/src/api/resources/handbookPages.ts +1 -1
- package/src/api/resources/importJobs.ts +9 -0
- package/src/api/resources/listMembers.ts +173 -0
- package/src/api/resources/lists.ts +61 -0
- package/src/api/resources/opportunities.ts +3 -0
- package/src/api/resources/people.ts +4 -1
- package/src/api/resources/roles.ts +3 -1
- package/src/api/resources/sampleData.ts +57 -0
- package/src/api/resources/webhooks.ts +8 -24
- package/src/app/KelpieApp.tsx +16 -0
- package/src/components/ActivitiesPanel.tsx +3 -10
- package/src/components/ColumnPicker.tsx +124 -0
- package/src/components/CustomFieldsPanel.tsx +330 -0
- package/src/components/DataTable.tsx +89 -10
- package/src/components/DecisionsPanel.tsx +4 -12
- package/src/components/EntitySearch.tsx +12 -5
- package/src/components/FormsPanel.tsx +86 -0
- package/src/components/ListsPanel.tsx +176 -0
- package/src/components/NotesPanel.tsx +6 -14
- package/src/components/Paginator.tsx +78 -0
- package/src/components/PlanAttention.tsx +20 -3
- package/src/components/PlanPanel.tsx +2 -10
- package/src/components/Shell.tsx +4 -0
- package/src/components/useHasCustomFields.ts +18 -0
- package/src/index.ts +10 -1
- package/src/lib/listView.ts +149 -0
- package/src/lib/sort.ts +143 -0
- package/src/pages/CompaniesPage.tsx +125 -11
- package/src/pages/CompanyDetail.tsx +98 -63
- package/src/pages/DealDetail.tsx +34 -0
- package/src/pages/DealsPage.tsx +178 -24
- package/src/pages/DecisionsPage.tsx +75 -18
- package/src/pages/EnquiriesPage.tsx +434 -0
- package/src/pages/EnquiryDetail.tsx +554 -0
- package/src/pages/EnquiryStageSettingsPage.tsx +63 -0
- package/src/pages/FormDetail.tsx +23 -1
- package/src/pages/FormsPage.tsx +81 -17
- package/src/pages/FundraisingPage.tsx +152 -24
- package/src/pages/HiringPage.tsx +39 -11
- package/src/pages/ListDetail.tsx +470 -0
- package/src/pages/ListsPage.tsx +281 -0
- package/src/pages/OpportunitiesPage.tsx +130 -24
- package/src/pages/OpportunityDetail.tsx +168 -2
- package/src/pages/PartnershipDetail.tsx +35 -0
- package/src/pages/PartnershipsPage.tsx +149 -24
- package/src/pages/PeoplePage.tsx +157 -11
- package/src/pages/PersonDetail.tsx +157 -6
- package/src/pages/PlanningPage.tsx +259 -29
- package/src/pages/RaiseDetail.tsx +24 -0
- package/src/pages/RoleDetail.tsx +21 -26
- package/src/pages/SearchPage.tsx +1 -0
- package/src/pages/admin/DataPage.tsx +324 -13
- package/src/pages/admin/FieldsPage.tsx +455 -0
- package/src/pages/admin/PrivacyPage.tsx +461 -0
- package/src/pages/admin/WebhookDeliveries.tsx +10 -15
- package/src/pages/admin/WebhooksPage.tsx +14 -19
- package/src/pages/admin/WorkspaceSettingsPage.tsx +134 -2
- package/src/pages/dashboard/attention.ts +3 -0
- package/src/pages/forms/AddFieldMenu.tsx +121 -0
- package/src/pages/forms/EmbedPanel.tsx +163 -2
- package/src/pages/forms/FieldsEditor.tsx +539 -165
- package/src/pages/forms/FormActions.tsx +552 -0
- package/src/pages/forms/FormSettings.tsx +29 -70
- package/src/pages/forms/SubmissionDetail.tsx +249 -0
- package/src/pages/forms/SubmissionsTable.tsx +112 -26
- package/src/pages/forms/fieldList.ts +68 -5
- package/src/pages/forms/template.ts +103 -0
- package/src/pages/handbook/HandbookPage.tsx +1 -1
- package/src/pages/hiringDirectory.ts +2 -2
- package/src/pages/onboarding/WorkspaceStepPage.tsx +31 -3
- package/src/pages/positionDirectory.ts +2 -2
- package/src/styles.css +3 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DataTable.d.ts","sourceRoot":"","sources":["../../src/components/DataTable.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;
|
|
1
|
+
{"version":3,"file":"DataTable.d.ts","sourceRoot":"","sources":["../../src/components/DataTable.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAGtC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAE/C,MAAM,WAAW,MAAM,CAAC,IAAI;IAC1B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;IACpB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IACvC,QAAQ,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,IAAI,KAAK,SAAS,CAAA;IACzC,yFAAyF;IACzF,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IACrC;;;;;;OAMG;IACH,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,IAAI,KAAK,SAAS,CAAC,GAAG,SAAS,CAAA;CAC/D;AAED,MAAM,WAAW,cAAc,CAAC,IAAI;IAClC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAA;IACzB,QAAQ,CAAC,IAAI,EAAE,SAAS,IAAI,EAAE,CAAA;CAC/B;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,IAAI,CAAA;CAC7B;AAED,MAAM,WAAW,cAAc,CAAC,IAAI;IAClC,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,CAAC,IAAI,CAAC,EAAE,CAAA;IACzC,QAAQ,CAAC,IAAI,CAAC,EAAE,SAAS,IAAI,EAAE,GAAG,SAAS,CAAA;IAC3C,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,cAAc,CAAC,IAAI,CAAC,EAAE,GAAG,SAAS,CAAA;IAC7D,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,IAAI,KAAK,IAAI,CAAC,GAAG,SAAS,CAAA;IACvD,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IAC1C,qFAAqF;IACrF,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IAC9C,mIAAmI;IACnI,QAAQ,CAAC,WAAW,CAAC,EAAE,gBAAgB,GAAG,SAAS,CAAA;IACnD,QAAQ,CAAC,QAAQ,EAAE,CAAC,GAAG,EAAE,IAAI,KAAK,MAAM,CAAA;IACxC,8GAA8G;IAC9G,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IAClC,qHAAqH;IACrH,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,KAAK,IAAI,CAAC,GAAG,SAAS,CAAA;IACxE;;;;OAIG;IACH,QAAQ,CAAC,iBAAiB,CAAC,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,CAAA;CAC3D;AAwDD,wBAAgB,SAAS,CAAC,IAAI,EAAE,EAC9B,OAAO,EACP,IAAI,EACJ,MAAM,EACN,UAAU,EACV,YAA+B,EAC/B,gBAAiD,EACjD,WAAW,EACX,QAAQ,EACR,IAAI,EACJ,YAAY,EACZ,iBAAiB,GAClB,EAAE,cAAc,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,CA+G1C"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { sortRowsBy } from '../lib/sort.js';
|
|
2
3
|
function directionOf(sort, field) {
|
|
3
4
|
if (field === undefined || sort === undefined) {
|
|
4
5
|
return undefined;
|
|
@@ -16,20 +17,60 @@ function nextSort(sort, field) {
|
|
|
16
17
|
}
|
|
17
18
|
return current === 'asc' ? `-${field}` : undefined;
|
|
18
19
|
}
|
|
19
|
-
|
|
20
|
+
/**
|
|
21
|
+
* The identifier a column contributes to the sort string. Server sorts use the
|
|
22
|
+
* `sortKey` — the field the server knows — so a stored sort keeps working when
|
|
23
|
+
* a column is renamed in the UI. Client-only sorts fall back to the display
|
|
24
|
+
* `key`, since there is no server field to reference.
|
|
25
|
+
*/
|
|
26
|
+
function sortFieldOf(column) {
|
|
27
|
+
if (column.sortKey !== undefined) {
|
|
28
|
+
return column.sortKey;
|
|
29
|
+
}
|
|
30
|
+
return column.getSortValue !== undefined ? column.key : undefined;
|
|
31
|
+
}
|
|
32
|
+
function findActiveClientColumn(columns, sort) {
|
|
33
|
+
if (sort === undefined) {
|
|
34
|
+
return undefined;
|
|
35
|
+
}
|
|
36
|
+
const bare = sort.startsWith('-') ? sort.slice(1) : sort;
|
|
37
|
+
return columns.find((column) => column.getSortValue !== undefined && column.sortKey === undefined && column.key === bare);
|
|
38
|
+
}
|
|
39
|
+
export function DataTable({ columns, rows, groups, onRowClick, emptyMessage = 'No records yet', emptyDescription = 'Add a record to get started.', emptyAction, getRowId, sort, onSortChange, visibleColumnKeys, }) {
|
|
20
40
|
const flatRows = groups === undefined ? (rows ?? []) : groups.flatMap((group) => group.rows);
|
|
41
|
+
const displayedColumns = visibleColumnKeys === undefined
|
|
42
|
+
? columns
|
|
43
|
+
: columns.filter((column) => visibleColumnKeys.includes(column.key));
|
|
44
|
+
// Client sort is a page-local reorder: the server-returned page order stays
|
|
45
|
+
// the same, and only what is on screen shifts. Groups sort within each group,
|
|
46
|
+
// because the group is the primary key of the view — mixing rows across
|
|
47
|
+
// groups would break what the group header claims to count.
|
|
48
|
+
const clientSortColumn = findActiveClientColumn(displayedColumns, sort);
|
|
49
|
+
const clientDirection = clientSortColumn === undefined
|
|
50
|
+
? undefined
|
|
51
|
+
: directionOf(sort, clientSortColumn.key) ?? undefined;
|
|
52
|
+
const displayedRows = clientSortColumn === undefined || clientDirection === undefined || rows === undefined
|
|
53
|
+
? rows
|
|
54
|
+
: sortRowsBy(rows, clientSortColumn.getSortValue, clientDirection);
|
|
55
|
+
const displayedGroups = clientSortColumn === undefined || clientDirection === undefined || groups === undefined
|
|
56
|
+
? groups
|
|
57
|
+
: groups.map((group) => ({
|
|
58
|
+
...group,
|
|
59
|
+
rows: sortRowsBy(group.rows, clientSortColumn.getSortValue, clientDirection),
|
|
60
|
+
}));
|
|
21
61
|
if (flatRows.length === 0) {
|
|
22
62
|
return (_jsxs("div", { className: "rounded-md border border-dashed border-border px-6 py-12 text-center", children: [_jsx("p", { className: "text-[13px] font-medium text-ink", children: emptyMessage }), _jsx("p", { className: "mt-1 text-[12px] text-ink-muted", children: emptyDescription }), emptyAction !== undefined && (_jsx("button", { type: "button", onClick: emptyAction.onClick, className: "mt-3 rounded-md border border-border bg-surface-raised px-3 py-1.5 text-[12px] font-medium text-ink transition hover:border-border-strong hover:bg-surface-sunken", children: emptyAction.label }))] }));
|
|
23
63
|
}
|
|
24
|
-
return (
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
64
|
+
return (_jsxs("div", { className: "overflow-hidden rounded-md border border-border", children: [_jsxs("table", { className: "w-full border-collapse text-left text-[13px]", children: [_jsx("thead", { children: _jsx("tr", { className: "border-b border-border", children: displayedColumns.map((column) => {
|
|
65
|
+
const field = sortFieldOf(column);
|
|
66
|
+
const direction = directionOf(sort, field);
|
|
67
|
+
const sortable = field !== undefined && onSortChange !== undefined;
|
|
68
|
+
return (_jsx("th", { className: `px-3 py-2 text-[11px] font-medium text-ink-faint ${column.className ?? ''}`, children: sortable && field !== undefined ? (_jsxs("button", { type: "button", onClick: () => {
|
|
69
|
+
onSortChange?.(nextSort(sort, field));
|
|
70
|
+
}, className: "inline-flex items-center gap-1 transition hover:text-ink", children: [column.header, _jsx("span", { className: "text-ink-faint", children: direction === 'asc' ? '↑' : direction === 'desc' ? '↓' : '' })] })) : (column.header) }, column.key));
|
|
71
|
+
}) }) }), _jsx("tbody", { children: displayedGroups === undefined
|
|
72
|
+
? (displayedRows ?? []).map((row) => (_jsx(DataRow, { row: row, columns: displayedColumns, onRowClick: onRowClick }, getRowId(row))))
|
|
73
|
+
: displayedGroups.map((group) => (_jsx(GroupRows, { group: group, columns: displayedColumns, onRowClick: onRowClick, getRowId: getRowId }, group.id))) })] }), clientSortColumn !== undefined && (_jsxs("p", { className: "border-t border-border bg-surface-sunken/40 px-3 py-1.5 text-[11px] text-ink-faint", children: ["Sorted by ", clientSortColumn.header.toLowerCase(), " on this page. Other pages sort by their own defaults."] }))] }));
|
|
33
74
|
}
|
|
34
75
|
function GroupRows({ group, columns, onRowClick, getRowId, }) {
|
|
35
76
|
return (_jsxs(_Fragment, { children: [_jsx("tr", { className: "border-b border-border bg-surface-sunken/60", children: _jsx("td", { colSpan: columns.length, className: "px-3 py-1.5", children: _jsxs("span", { className: "inline-flex items-center gap-2", children: [group.label, _jsx("span", { className: "font-mono text-[11px] text-ink-faint", children: group.rows.length })] }) }) }), group.rows.map((row) => (_jsx(DataRow, { row: row, columns: columns, onRowClick: onRowClick }, getRowId(row))))] }));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DataTable.js","sourceRoot":"","sources":["../../src/components/DataTable.tsx"],"names":[],"mappings":";
|
|
1
|
+
{"version":3,"file":"DataTable.js","sourceRoot":"","sources":["../../src/components/DataTable.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DecisionsPanel.d.ts","sourceRoot":"","sources":["../../src/components/DecisionsPanel.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAY,gBAAgB,EAAE,MAAM,iBAAiB,CAAA;
|
|
1
|
+
{"version":3,"file":"DecisionsPanel.d.ts","sourceRoot":"","sources":["../../src/components/DecisionsPanel.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAY,gBAAgB,EAAE,MAAM,iBAAiB,CAAA;AAajE;;;;;;GAMG;AAEH,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,UAAU,EAAE,gBAAgB,CAAA;IACrC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;CAC1B;AAED,wBAAgB,cAAc,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,EAAE,mBAAmB,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,CAyJ/F"}
|
|
@@ -5,6 +5,7 @@ import { useTimezone } from '../api/resources/account.js';
|
|
|
5
5
|
import { useCreateDecision, useDecisions, useDeleteDecision } from '../api/resources/decisions.js';
|
|
6
6
|
import { useMembers } from '../api/resources/members.js';
|
|
7
7
|
import { formatDate } from '../lib/dates.js';
|
|
8
|
+
import { Paginator } from './Paginator.js';
|
|
8
9
|
import { ErrorPanel } from './QueryState.js';
|
|
9
10
|
import { SectionHeader } from './SectionHeader.js';
|
|
10
11
|
export function DecisionsPanel({ targetType, targetId }) {
|
|
@@ -18,8 +19,8 @@ export function DecisionsPanel({ targetType, targetId }) {
|
|
|
18
19
|
const [dueAt, setDueAt] = useState('');
|
|
19
20
|
// Due date first, decided date otherwise, newest down — the mockup's order.
|
|
20
21
|
// The list arrives in `-decided_at` order and the API cannot sort on the
|
|
21
|
-
// nullable `due_at`, so this reorders what is
|
|
22
|
-
//
|
|
22
|
+
// nullable `due_at`, so this reorders what is on this page; across page
|
|
23
|
+
// boundaries the interleave can be wrong, which is the cheaper wrong than a
|
|
23
24
|
// second request per panel.
|
|
24
25
|
const ordered = [...decisions.records].sort((left, right) => (right.dueAt ?? right.decidedAt).getTime() - (left.dueAt ?? left.decidedAt).getTime());
|
|
25
26
|
function reset() {
|
|
@@ -55,7 +56,7 @@ export function DecisionsPanel({ targetType, targetId }) {
|
|
|
55
56
|
setDueAt(event.target.value);
|
|
56
57
|
}, className: "rounded-md border border-border bg-surface-raised px-2 py-1 text-[12px] outline-none focus:border-accent" })] }), _jsxs("div", { className: "ml-auto flex gap-2", children: [_jsx("button", { type: "button", onClick: reset, className: "rounded-md px-2.5 py-1.5 text-[12px] font-medium text-ink-muted hover:text-ink", children: "Cancel" }), _jsx("button", { type: "submit", className: "rounded-md bg-accent px-3 py-1.5 text-[12px] font-semibold text-accent-fg hover:bg-accent-hover", children: "Add" })] })] })] })), decisions.isLoading && _jsx("p", { className: "text-[13px] text-ink-faint", children: "Loading decisions\u2026" }), !decisions.isLoading && ordered.length === 0 && !adding ? (_jsx("p", { className: "text-[13px] text-ink-faint", children: "No decisions yet." })) : (ordered.length > 0 && (_jsx("ul", { className: "overflow-hidden rounded-md border border-border", children: ordered.map((decision) => (_jsx(DecisionItem, { decision: decision, ownerName: ownerNameFor(decision, members.nameById), onRemove: () => {
|
|
57
58
|
deleteDecision.run(decision.id);
|
|
58
|
-
} }, decision.id))) }))),
|
|
59
|
+
} }, decision.id))) }))), _jsx(Paginator, { list: decisions }), _jsx("p", { className: "mt-2 text-[11px] text-ink-faint", children: _jsx(Link, { to: "/decisions", className: "text-accent hover:underline", children: "View all decisions" }) })] }));
|
|
59
60
|
}
|
|
60
61
|
/**
|
|
61
62
|
* The mockup shows an owner only when it can name one, so a null owner and a
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DecisionsPanel.js","sourceRoot":"","sources":["../../src/components/DecisionsPanel.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAEhC,OAAO,EAAE,IAAI,EAAE,MAAM,cAAc,CAAA;AAEnC,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAA;AACzD,OAAO,EAAE,iBAAiB,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAA;AAClG,OAAO,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAA;AACxD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAkB,CAAA;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAqB,CAAA;AAenD,MAAM,UAAU,cAAc,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAuB;IAC1E,MAAM,SAAS,GAAG,YAAY,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC,CAAA;IACxD,MAAM,OAAO,GAAG,UAAU,EAAE,CAAA;IAC5B,MAAM,cAAc,GAAG,iBAAiB,EAAE,CAAA;IAC1C,MAAM,cAAc,GAAG,iBAAiB,EAAE,CAAA;IAC1C,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAA;IAC3C,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAA;IACpC,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAA;IAC9C,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAA;IAEtC,4EAA4E;IAC5E,yEAAyE;IACzE,
|
|
1
|
+
{"version":3,"file":"DecisionsPanel.js","sourceRoot":"","sources":["../../src/components/DecisionsPanel.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAEhC,OAAO,EAAE,IAAI,EAAE,MAAM,cAAc,CAAA;AAEnC,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAA;AACzD,OAAO,EAAE,iBAAiB,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAA;AAClG,OAAO,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAA;AACxD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAiB,CAAA;AAC3C,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAkB,CAAA;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAqB,CAAA;AAenD,MAAM,UAAU,cAAc,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAuB;IAC1E,MAAM,SAAS,GAAG,YAAY,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC,CAAA;IACxD,MAAM,OAAO,GAAG,UAAU,EAAE,CAAA;IAC5B,MAAM,cAAc,GAAG,iBAAiB,EAAE,CAAA;IAC1C,MAAM,cAAc,GAAG,iBAAiB,EAAE,CAAA;IAC1C,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAA;IAC3C,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAA;IACpC,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAA;IAC9C,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAA;IAEtC,4EAA4E;IAC5E,yEAAyE;IACzE,wEAAwE;IACxE,4EAA4E;IAC5E,4BAA4B;IAC5B,MAAM,OAAO,GAAG,CAAC,GAAG,SAAS,CAAC,OAAO,CAAC,CAAC,IAAI,CACzC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CACd,CAAC,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,GAAG,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,CACxF,CAAA;IAED,SAAS,KAAK;QACZ,SAAS,CAAC,KAAK,CAAC,CAAA;QAChB,OAAO,CAAC,EAAE,CAAC,CAAA;QACX,YAAY,CAAC,EAAE,CAAC,CAAA;QAChB,QAAQ,CAAC,EAAE,CAAC,CAAA;IACd,CAAC;IAED,SAAS,MAAM,CAAC,KAAgB;QAC9B,KAAK,CAAC,cAAc,EAAE,CAAA;QAEtB,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,CAAA;QAExB,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACtB,OAAM;QACR,CAAC;QAED,MAAM,SAAS,GAAG,SAAS,CAAC,IAAI,EAAE,CAAA;QAElC,cAAc,CAAC,GAAG,CAAC;YACjB,UAAU;YACV,QAAQ;YACR,IAAI,EAAE,IAAI;YACV,GAAG,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC;YAC3D,0EAA0E;YAC1E,GAAG,CAAC,KAAK,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,IAAI,CAAC,GAAG,KAAK,WAAW,CAAC,EAAE,CAAC;SAClE,CAAC,CAAA;QACF,KAAK,EAAE,CAAA;IACT,CAAC;IAED,OAAO,CACL,8BACE,KAAC,aAAa,IACZ,KAAK,EAAC,WAAW,EACjB,KAAK,EAAE,GAAG,EAAE;oBACV,SAAS,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,CAAA;gBAClC,CAAC,EACD,QAAQ,EAAC,cAAc,GACvB,EAED,cAAc,CAAC,KAAK,KAAK,IAAI,IAAI,CAChC,cAAK,SAAS,EAAC,MAAM,YACnB,KAAC,UAAU,IAAC,KAAK,EAAE,cAAc,CAAC,KAAK,GAAI,GACvC,CACP,EACA,cAAc,CAAC,KAAK,KAAK,IAAI,IAAI,CAChC,cAAK,SAAS,EAAC,MAAM,YACnB,KAAC,UAAU,IAAC,KAAK,EAAE,cAAc,CAAC,KAAK,GAAI,GACvC,CACP,EACA,SAAS,CAAC,KAAK,KAAK,IAAI,IAAI,KAAC,UAAU,IAAC,KAAK,EAAE,SAAS,CAAC,KAAK,GAAI,EAElE,MAAM,IAAI,CACT,gBAAM,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAC,gBAAgB,aAChD,mBACE,KAAK,EAAE,IAAI,EACX,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE;4BAClB,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;wBAC7B,CAAC,EACD,WAAW,EAAC,6BAAwB,EACpC,IAAI,EAAE,CAAC,EACP,SAAS,QACT,QAAQ,QACR,SAAS,EAAC,4JAA4J,GACtK,EACF,gBACE,KAAK,EAAE,SAAS,EAChB,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE;4BAClB,YAAY,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;wBAClC,CAAC,EACD,WAAW,EAAC,sBAAsB,EAClC,SAAS,EAAC,mHAAmH,GAC7H,EACF,eAAK,SAAS,EAAC,mCAAmC,aAChD,iBAAO,SAAS,EAAC,oDAAoD,mBAEnE,gBACE,IAAI,EAAC,MAAM,EACX,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE;4CAClB,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;wCAC9B,CAAC,EACD,SAAS,EAAC,0GAA0G,GACpH,IACI,EACR,eAAK,SAAS,EAAC,oBAAoB,aACjC,iBACE,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,KAAK,EACd,SAAS,EAAC,gFAAgF,uBAGnF,EACT,iBACE,IAAI,EAAC,QAAQ,EACb,SAAS,EAAC,iGAAiG,oBAGpG,IACL,IACF,IACD,CACR,EAEA,SAAS,CAAC,SAAS,IAAI,YAAG,SAAS,EAAC,4BAA4B,wCAAuB,EAEvF,CAAC,SAAS,CAAC,SAAS,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CACzD,YAAG,SAAS,EAAC,4BAA4B,kCAAsB,CAChE,CAAC,CAAC,CAAC,CACF,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,CACpB,aAAI,SAAS,EAAC,iDAAiD,YAC5D,OAAO,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CACzB,KAAC,YAAY,IAEX,QAAQ,EAAE,QAAQ,EAClB,SAAS,EAAE,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,QAAQ,CAAC,EACnD,QAAQ,EAAE,GAAG,EAAE;wBACb,cAAc,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAA;oBACjC,CAAC,IALI,QAAQ,CAAC,EAAE,CAMhB,CACH,CAAC,GACC,CACN,CACF,EAED,KAAC,SAAS,IAAC,IAAI,EAAE,SAAS,GAAI,EAE9B,YAAG,SAAS,EAAC,iCAAiC,YAC5C,KAAC,IAAI,IAAC,EAAE,EAAC,YAAY,EAAC,SAAS,EAAC,6BAA6B,mCAEtD,GACL,IACI,CACX,CAAA;AACH,CAAC;AAED;;;;GAIG;AACH,SAAS,YAAY,CAAC,QAAkB,EAAE,QAAqC;IAC7E,IAAI,QAAQ,CAAC,OAAO,KAAK,IAAI,EAAE,CAAC;QAC9B,OAAO,SAAS,CAAA;IAClB,CAAC;IAED,OAAO,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAA;AACvC,CAAC;AAED,SAAS,YAAY,CAAC,EACpB,QAAQ,EACR,SAAS,EACT,QAAQ,GAKT;IACC,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAA;IAE9B,OAAO,CACL,cAAI,SAAS,EAAC,gDAAgD,aAC5D,eAAK,SAAS,EAAC,wCAAwC,aACrD,YAAG,SAAS,EAAC,iDAAiD,YAAE,QAAQ,CAAC,IAAI,GAAK,EAClF,iBACE,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,QAAQ,EACjB,SAAS,EAAC,mEAAmE,uBAGtE,IACL,EACL,QAAQ,CAAC,SAAS,KAAK,IAAI,IAAI,CAC9B,YAAG,SAAS,EAAC,iCAAiC,YAAE,QAAQ,CAAC,SAAS,GAAK,CACxE,EACD,eAAK,SAAS,EAAC,gEAAgE,aAC7E,uCAAe,UAAU,CAAC,QAAQ,CAAC,SAAS,EAAE,QAAQ,CAAC,IAAQ,EAC9D,QAAQ,CAAC,KAAK,KAAK,IAAI,IAAI,kCAAU,UAAU,CAAC,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,IAAQ,EACjF,SAAS,KAAK,SAAS,IAAI,yBAAO,SAAS,GAAQ,IAChD,IACH,CACN,CAAA;AACH,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EntitySearch.d.ts","sourceRoot":"","sources":["../../src/components/EntitySearch.tsx"],"names":[],"mappings":"AAEA;;;;;;;;GAQG;AAEH,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;CACnC;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,OAAO,EAAE,SAAS,YAAY,EAAE,CAAA;IACzC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,QAAQ,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAA;IACvC,2FAA2F;IAC3F,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC,GAAG,SAAS,CAAA;IAC9D,8EAA8E;IAC9E,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC,GAAG,SAAS,CAAA;IACzD,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC,GAAG,SAAS,CAAA;IAC9D,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IACzC,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IAC1C,qEAAqE;IACrE,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IACnC,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,GAAG,SAAS,CAAA;IACvC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IACvC,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,SAAS,CAAA;CACxC;AAED,wBAAgB,YAAY,CAAC,EAC3B,OAAO,EACP,KAAK,EACL,QAAQ,EACR,aAAa,EACb,QAAQ,EACR,WAA4C,EAC5C,WAAuB,EACvB,YAA2B,EAC3B,KAAS,EACT,QAAQ,EACR,SAAc,EACd,IAAW,GACZ,EAAE,iBAAiB,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,
|
|
1
|
+
{"version":3,"file":"EntitySearch.d.ts","sourceRoot":"","sources":["../../src/components/EntitySearch.tsx"],"names":[],"mappings":"AAEA;;;;;;;;GAQG;AAEH,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;CACnC;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,OAAO,EAAE,SAAS,YAAY,EAAE,CAAA;IACzC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,QAAQ,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAA;IACvC,2FAA2F;IAC3F,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC,GAAG,SAAS,CAAA;IAC9D,8EAA8E;IAC9E,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC,GAAG,SAAS,CAAA;IACzD,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC,GAAG,SAAS,CAAA;IAC9D,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IACzC,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IAC1C,qEAAqE;IACrE,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IACnC,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,GAAG,SAAS,CAAA;IACvC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IACvC,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,SAAS,CAAA;CACxC;AAED,wBAAgB,YAAY,CAAC,EAC3B,OAAO,EACP,KAAK,EACL,QAAQ,EACR,aAAa,EACb,QAAQ,EACR,WAA4C,EAC5C,WAAuB,EACvB,YAA2B,EAC3B,KAAS,EACT,QAAQ,EACR,SAAc,EACd,IAAW,GACZ,EAAE,iBAAiB,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,CAiOvC"}
|
|
@@ -3,10 +3,15 @@ import { useEffect, useId, useMemo, useRef, useState } from 'react';
|
|
|
3
3
|
export function EntitySearch({ options, value, onChange, onQueryChange, onCreate, createLabel = (query) => `Create “${query}”`, placeholder = 'Search…', emptyMessage = 'No matches', limit = 8, required, className = '', size = 'sm', }) {
|
|
4
4
|
const listId = useId();
|
|
5
5
|
const rootRef = useRef(null);
|
|
6
|
-
const selected = options.find((option) => option.id === value);
|
|
7
6
|
const [query, setQuery] = useState('');
|
|
8
7
|
const [open, setOpen] = useState(false);
|
|
9
8
|
const [highlight, setHighlight] = useState(0);
|
|
9
|
+
// A picked option must keep rendering even when the current `options` list
|
|
10
|
+
// no longer contains it — for a server-backed search, clearing the query on
|
|
11
|
+
// pick swaps the answer to a different page that may not include the pick.
|
|
12
|
+
const [remembered, setRemembered] = useState(null);
|
|
13
|
+
const selected = options.find((option) => option.id === value) ??
|
|
14
|
+
(remembered !== null && remembered.id === value ? remembered : undefined);
|
|
10
15
|
const filtered = useMemo(() => {
|
|
11
16
|
const term = query.trim().toLowerCase();
|
|
12
17
|
if (onQueryChange !== undefined || term.length === 0) {
|
|
@@ -42,8 +47,9 @@ export function EntitySearch({ options, value, onChange, onQueryChange, onCreate
|
|
|
42
47
|
setQuery(next);
|
|
43
48
|
onQueryChange?.(next);
|
|
44
49
|
}
|
|
45
|
-
function pick(
|
|
46
|
-
|
|
50
|
+
function pick(option) {
|
|
51
|
+
setRemembered(option);
|
|
52
|
+
onChange(option.id);
|
|
47
53
|
setOpen(false);
|
|
48
54
|
search('');
|
|
49
55
|
}
|
|
@@ -84,7 +90,7 @@ export function EntitySearch({ options, value, onChange, onQueryChange, onCreate
|
|
|
84
90
|
event.preventDefault();
|
|
85
91
|
const hit = filtered[highlight];
|
|
86
92
|
if (hit !== undefined) {
|
|
87
|
-
pick(hit
|
|
93
|
+
pick(hit);
|
|
88
94
|
}
|
|
89
95
|
else if (showCreate) {
|
|
90
96
|
create();
|
|
@@ -97,7 +103,7 @@ export function EntitySearch({ options, value, onChange, onQueryChange, onCreate
|
|
|
97
103
|
}, placeholder: placeholder, role: "combobox", "aria-expanded": open, "aria-controls": listId, "aria-autocomplete": "list", className: `w-full rounded-md border border-border bg-surface-raised outline-none focus:border-accent focus:ring-2 focus:ring-accent/20 ${inputClass}` })), open && (_jsxs("ul", { id: listId, role: "listbox", className: "absolute z-20 mt-1 max-h-56 w-full overflow-auto rounded-md border border-border bg-surface-raised py-1", children: [filtered.length === 0 && !showCreate ? (_jsx("li", { className: "px-3 py-2 text-[12px] text-ink-faint", children: emptyMessage })) : (_jsxs(_Fragment, { children: [filtered.map((option, index) => (_jsx("li", { role: "option", "aria-selected": index === highlight, children: _jsxs("button", { type: "button", onMouseEnter: () => {
|
|
98
104
|
setHighlight(index);
|
|
99
105
|
}, onClick: () => {
|
|
100
|
-
pick(option
|
|
106
|
+
pick(option);
|
|
101
107
|
}, className: [
|
|
102
108
|
'flex w-full flex-col px-3 py-1.5 text-left',
|
|
103
109
|
index === highlight ? 'bg-accent-soft' : 'hover:bg-surface',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EntitySearch.js","sourceRoot":"","sources":["../../src/components/EntitySearch.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAoCnE,MAAM,UAAU,YAAY,CAAC,EAC3B,OAAO,EACP,KAAK,EACL,QAAQ,EACR,aAAa,EACb,QAAQ,EACR,WAAW,GAAG,CAAC,KAAK,EAAE,EAAE,CAAC,WAAW,KAAK,GAAG,EAC5C,WAAW,GAAG,SAAS,EACvB,YAAY,GAAG,YAAY,EAC3B,KAAK,GAAG,CAAC,EACT,QAAQ,EACR,SAAS,GAAG,EAAE,EACd,IAAI,GAAG,IAAI,GACO;IAClB,MAAM,MAAM,GAAG,KAAK,EAAE,CAAA;IACtB,MAAM,OAAO,GAAG,MAAM,CAAiB,IAAI,CAAC,CAAA;IAC5C,MAAM,QAAQ,GAAG,
|
|
1
|
+
{"version":3,"file":"EntitySearch.js","sourceRoot":"","sources":["../../src/components/EntitySearch.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { FormSubmissionLinkTarget } from '@kelpie/schemas';
|
|
2
|
+
/**
|
|
3
|
+
* "Which forms touched this record?" panel, for any record's detail page.
|
|
4
|
+
*
|
|
5
|
+
* A submission's FK to this record is what puts it here — the record was
|
|
6
|
+
* either created by the form, or matched from an earlier upsert. The panel
|
|
7
|
+
* does not distinguish the two (nothing on the row tells them apart), and
|
|
8
|
+
* the section header reflects that.
|
|
9
|
+
*
|
|
10
|
+
* Form names are pulled from `useForms`, which the sidebar already caches;
|
|
11
|
+
* an unresolved id (deleted form) falls back to the id itself so the row
|
|
12
|
+
* stays clickable.
|
|
13
|
+
*/
|
|
14
|
+
export declare function FormsPanel({ targetType, targetId, }: {
|
|
15
|
+
readonly targetType: FormSubmissionLinkTarget;
|
|
16
|
+
readonly targetId: string;
|
|
17
|
+
}): React.JSX.Element;
|
|
18
|
+
//# sourceMappingURL=FormsPanel.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FormsPanel.d.ts","sourceRoot":"","sources":["../../src/components/FormsPanel.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,iBAAiB,CAAA;AAU/D;;;;;;;;;;;GAWG;AACH,wBAAgB,UAAU,CAAC,EACzB,UAAU,EACV,QAAQ,GACT,EAAE;IACD,QAAQ,CAAC,UAAU,EAAE,wBAAwB,CAAA;IAC7C,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;CAC1B,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,CAyDpB"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useMemo } from 'react';
|
|
3
|
+
import { Link } from 'react-router';
|
|
4
|
+
import { useTimezone } from '../api/resources/account.js';
|
|
5
|
+
import { useForms, useFormSubmissionsForRecord } from '../api/resources/forms.js';
|
|
6
|
+
import { formatDateTime } from '../lib/dates.js';
|
|
7
|
+
import { ErrorPanel, LoadingPanel } from './QueryState.js';
|
|
8
|
+
import { SectionHeader } from './SectionHeader.js';
|
|
9
|
+
/**
|
|
10
|
+
* "Which forms touched this record?" panel, for any record's detail page.
|
|
11
|
+
*
|
|
12
|
+
* A submission's FK to this record is what puts it here — the record was
|
|
13
|
+
* either created by the form, or matched from an earlier upsert. The panel
|
|
14
|
+
* does not distinguish the two (nothing on the row tells them apart), and
|
|
15
|
+
* the section header reflects that.
|
|
16
|
+
*
|
|
17
|
+
* Form names are pulled from `useForms`, which the sidebar already caches;
|
|
18
|
+
* an unresolved id (deleted form) falls back to the id itself so the row
|
|
19
|
+
* stays clickable.
|
|
20
|
+
*/
|
|
21
|
+
export function FormsPanel({ targetType, targetId, }) {
|
|
22
|
+
const submissions = useFormSubmissionsForRecord(targetType, targetId);
|
|
23
|
+
const forms = useForms({});
|
|
24
|
+
const timezone = useTimezone();
|
|
25
|
+
const formNameById = useMemo(() => new Map(forms.records.map((form) => [form.id, form.name])), [forms.records]);
|
|
26
|
+
if (submissions.error !== null) {
|
|
27
|
+
return _jsx(ErrorPanel, { error: submissions.error });
|
|
28
|
+
}
|
|
29
|
+
if (submissions.isLoading) {
|
|
30
|
+
return _jsx(LoadingPanel, { label: "Loading form submissions\u2026" });
|
|
31
|
+
}
|
|
32
|
+
return (_jsxs("section", { children: [_jsx(SectionHeader, { title: "Forms", description: "Every form submission that named this record." }), submissions.records.length === 0 ? (_jsx("p", { className: "text-[13px] text-ink-faint", children: "No form submissions yet." })) : (_jsx("ul", { className: "divide-y divide-border rounded-md border border-border", children: submissions.records.map((submission) => {
|
|
33
|
+
const formName = formNameById.get(submission.formId) ?? submission.formId;
|
|
34
|
+
return (_jsxs("li", { className: "flex items-center justify-between gap-3 p-3", children: [_jsxs("div", { className: "min-w-0", children: [_jsx(Link, { to: `/forms/${submission.formId}/submissions/${submission.id}`, className: "text-[13px] font-medium text-ink hover:text-accent", children: formName }), _jsxs("div", { className: "text-[11px] text-ink-faint", children: ["Submitted ", formatDateTime(submission.submittedAt, timezone)] })] }), _jsx(Link, { to: `/forms/${submission.formId}`, className: "shrink-0 text-[11px] font-medium text-ink-muted hover:text-accent", children: "Open form \u2192" })] }, submission.id));
|
|
35
|
+
}) }))] }));
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=FormsPanel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FormsPanel.js","sourceRoot":"","sources":["../../src/components/FormsPanel.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAA;AAC/B,OAAO,EAAE,IAAI,EAAE,MAAM,cAAc,CAAA;AAEnC,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAA;AACzD,OAAO,EAAE,QAAQ,EAAE,2BAA2B,EAAE,MAAM,2BAA2B,CAAA;AACjF,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAA;AAChD,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,iBAAkB,CAAA;AAC3D,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAqB,CAAA;AAEnD;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,UAAU,CAAC,EACzB,UAAU,EACV,QAAQ,GAIT;IACC,MAAM,WAAW,GAAG,2BAA2B,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAA;IACrE,MAAM,KAAK,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAA;IAC1B,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAA;IAC9B,MAAM,YAAY,GAAG,OAAO,CAC1B,GAAG,EAAE,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAChE,CAAC,KAAK,CAAC,OAAO,CAAC,CAChB,CAAA;IAED,IAAI,WAAW,CAAC,KAAK,KAAK,IAAI,EAAE,CAAC;QAC/B,OAAO,KAAC,UAAU,IAAC,KAAK,EAAE,WAAW,CAAC,KAAK,GAAI,CAAA;IACjD,CAAC;IAED,IAAI,WAAW,CAAC,SAAS,EAAE,CAAC;QAC1B,OAAO,KAAC,YAAY,IAAC,KAAK,EAAC,gCAA2B,GAAG,CAAA;IAC3D,CAAC;IAED,OAAO,CACL,8BACE,KAAC,aAAa,IACZ,KAAK,EAAC,OAAO,EACb,WAAW,EAAC,+CAA+C,GAC3D,EAED,WAAW,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,CAClC,YAAG,SAAS,EAAC,4BAA4B,yCAA6B,CACvE,CAAC,CAAC,CAAC,CACF,aAAI,SAAS,EAAC,wDAAwD,YACnE,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE;oBACtC,MAAM,QAAQ,GAAG,YAAY,CAAC,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,UAAU,CAAC,MAAM,CAAA;oBAEzE,OAAO,CACL,cAAwB,SAAS,EAAC,6CAA6C,aAC7E,eAAK,SAAS,EAAC,SAAS,aACtB,KAAC,IAAI,IACH,EAAE,EAAE,UAAU,UAAU,CAAC,MAAM,gBAAgB,UAAU,CAAC,EAAE,EAAE,EAC9D,SAAS,EAAC,oDAAoD,YAE7D,QAAQ,GACJ,EACP,eAAK,SAAS,EAAC,4BAA4B,2BAC9B,cAAc,CAAC,UAAU,CAAC,WAAW,EAAE,QAAQ,CAAC,IACvD,IACF,EACN,KAAC,IAAI,IACH,EAAE,EAAE,UAAU,UAAU,CAAC,MAAM,EAAE,EACjC,SAAS,EAAC,mEAAmE,iCAGxE,KAjBA,UAAU,CAAC,EAAE,CAkBjB,CACN,CAAA;gBACH,CAAC,CAAC,GACC,CACN,IACO,CACX,CAAA;AACH,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { RecordTargetType } from '@kelpie/schemas';
|
|
2
|
+
/**
|
|
3
|
+
* "What lists is this record on?" panel, for any record's detail page.
|
|
4
|
+
*
|
|
5
|
+
* A record can only join a list whose `target_type` matches its own, so the
|
|
6
|
+
* picker is filtered accordingly. Removing a chip calls
|
|
7
|
+
* `DELETE /v1/lists/{id}/members/{memberId}` and the cached counts on the
|
|
8
|
+
* lists index refresh with it.
|
|
9
|
+
*/
|
|
10
|
+
export declare function ListsPanel({ targetType, targetId, }: {
|
|
11
|
+
readonly targetType: RecordTargetType;
|
|
12
|
+
readonly targetId: string;
|
|
13
|
+
}): React.JSX.Element;
|
|
14
|
+
//# sourceMappingURL=ListsPanel.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ListsPanel.d.ts","sourceRoot":"","sources":["../../src/components/ListsPanel.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAwB,gBAAgB,EAAE,MAAM,iBAAiB,CAAA;AAe7E;;;;;;;GAOG;AACH,wBAAgB,UAAU,CAAC,EACzB,UAAU,EACV,QAAQ,GACT,EAAE;IACD,QAAQ,CAAC,UAAU,EAAE,gBAAgB,CAAA;IACrC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;CAC1B,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,CAwDpB"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { RECORD_TARGET_TYPE_LABELS } from '@kelpie/schemas';
|
|
3
|
+
import { useState } from 'react';
|
|
4
|
+
import { Link } from 'react-router';
|
|
5
|
+
import { useAddListMember, useListMembershipsFor, useRemoveListMember, } from '../api/resources/listMembers.js';
|
|
6
|
+
import { useLists } from '../api/resources/lists.js';
|
|
7
|
+
import { EntitySearch } from './EntitySearch.js';
|
|
8
|
+
import { ErrorPanel, LoadingPanel } from './QueryState.js';
|
|
9
|
+
import { SectionHeader } from './SectionHeader.js';
|
|
10
|
+
/**
|
|
11
|
+
* "What lists is this record on?" panel, for any record's detail page.
|
|
12
|
+
*
|
|
13
|
+
* A record can only join a list whose `target_type` matches its own, so the
|
|
14
|
+
* picker is filtered accordingly. Removing a chip calls
|
|
15
|
+
* `DELETE /v1/lists/{id}/members/{memberId}` and the cached counts on the
|
|
16
|
+
* lists index refresh with it.
|
|
17
|
+
*/
|
|
18
|
+
export function ListsPanel({ targetType, targetId, }) {
|
|
19
|
+
const memberships = useListMembershipsFor(targetType, targetId);
|
|
20
|
+
const [adding, setAdding] = useState(false);
|
|
21
|
+
return (_jsxs("section", { children: [_jsx(SectionHeader, { title: "Lists", onAdd: () => {
|
|
22
|
+
setAdding((current) => !current);
|
|
23
|
+
}, addLabel: "Add to list" }), adding && (_jsxs("div", { className: "mb-3 flex gap-2", children: [_jsx("div", { className: "min-w-0 flex-1", children: _jsx(ListPicker, { targetType: targetType, targetId: targetId, excludeListIds: new Set(memberships.memberships.map((row) => row.listId)), onAdded: () => {
|
|
24
|
+
setAdding(false);
|
|
25
|
+
} }) }), _jsx("button", { type: "button", onClick: () => {
|
|
26
|
+
setAdding(false);
|
|
27
|
+
}, className: "shrink-0 rounded-md px-2.5 py-1.5 text-[12px] font-medium text-ink-muted hover:text-ink", children: "Cancel" })] })), memberships.error !== null && _jsx(ErrorPanel, { error: memberships.error }), memberships.isLoading ? (_jsx(LoadingPanel, { label: "Loading lists\u2026" })) : memberships.memberships.length === 0 && !adding ? (_jsxs("p", { className: "text-[13px] text-ink-faint", children: ["Not on any lists yet. Add this ", RECORD_TARGET_TYPE_LABELS[targetType].toLowerCase(), " to a list to group it with others."] })) : (_jsx("ul", { className: "overflow-hidden rounded-md border border-border", children: memberships.memberships.map((membership) => (_jsx(MembershipRow, { membership: membership }, membership.id))) }))] }));
|
|
28
|
+
}
|
|
29
|
+
function MembershipRow({ membership, }) {
|
|
30
|
+
const remove = useRemoveListMember();
|
|
31
|
+
return (_jsxs("li", { className: "border-b border-border px-4 py-3 last:border-0", children: [_jsxs("div", { className: "flex flex-wrap items-center justify-between gap-3", children: [_jsx(Link, { to: `/lists/${membership.listId}`, className: "text-left text-[13px] font-medium text-ink hover:text-accent", children: membership.listName }), _jsx("button", { type: "button", disabled: remove.isPending, onClick: () => {
|
|
32
|
+
remove.run({ listId: membership.listId, id: membership.id });
|
|
33
|
+
}, className: "text-[11px] font-medium text-danger hover:underline disabled:opacity-50", children: "Remove" })] }), remove.error !== null && (_jsx("div", { className: "mt-2", children: _jsx(ErrorPanel, { error: remove.error }) }))] }));
|
|
34
|
+
}
|
|
35
|
+
function ListPicker({ targetType, targetId, excludeListIds, onAdded, }) {
|
|
36
|
+
const [search, setSearch] = useState('');
|
|
37
|
+
const term = search.trim();
|
|
38
|
+
// Only lists whose type matches — the DB will refuse a mismatched member,
|
|
39
|
+
// but the picker filters up front so the surface never offers one.
|
|
40
|
+
const lists = useLists({
|
|
41
|
+
targetType,
|
|
42
|
+
term: term.length > 0 ? term : undefined,
|
|
43
|
+
});
|
|
44
|
+
const addMember = useAddListMember();
|
|
45
|
+
const options = lists.records
|
|
46
|
+
.filter((row) => !excludeListIds.has(row.id))
|
|
47
|
+
.map((row) => ({ id: row.id, label: row.name }));
|
|
48
|
+
function pick(listId) {
|
|
49
|
+
addMember
|
|
50
|
+
.runAsync({ listId, input: { targetType, targetId } })
|
|
51
|
+
.then(onAdded)
|
|
52
|
+
.catch(() => undefined);
|
|
53
|
+
}
|
|
54
|
+
return (_jsxs("div", { children: [_jsx(EntitySearch, { options: options, value: "", onChange: pick, onQueryChange: setSearch, placeholder: "Search lists\u2026", emptyMessage: "No matching lists", size: "md" }), addMember.error !== null && (_jsx("div", { className: "mt-2", children: _jsx(ErrorPanel, { error: addMember.error }) }))] }));
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=ListsPanel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ListsPanel.js","sourceRoot":"","sources":["../../src/components/ListsPanel.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,yBAAyB,EAAE,MAAM,iBAAiB,CAAA;AAE3D,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAChC,OAAO,EAAE,IAAI,EAAE,MAAM,cAAc,CAAA;AAEnC,OAAO,EACL,gBAAgB,EAChB,qBAAqB,EACrB,mBAAmB,GACpB,MAAM,iCAAiC,CAAA;AACxC,OAAO,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAA;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAoB,CAAA;AAEjD,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,iBAAkB,CAAA;AAC3D,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAqB,CAAA;AAEnD;;;;;;;GAOG;AACH,MAAM,UAAU,UAAU,CAAC,EACzB,UAAU,EACV,QAAQ,GAIT;IACC,MAAM,WAAW,GAAG,qBAAqB,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAA;IAC/D,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAA;IAE3C,OAAO,CACL,8BACE,KAAC,aAAa,IACZ,KAAK,EAAC,OAAO,EACb,KAAK,EAAE,GAAG,EAAE;oBACV,SAAS,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,CAAA;gBAClC,CAAC,EACD,QAAQ,EAAC,aAAa,GACtB,EAED,MAAM,IAAI,CACT,eAAK,SAAS,EAAC,iBAAiB,aAC9B,cAAK,SAAS,EAAC,gBAAgB,YAC7B,KAAC,UAAU,IACT,UAAU,EAAE,UAAU,EACtB,QAAQ,EAAE,QAAQ,EAClB,cAAc,EAAE,IAAI,GAAG,CAAC,WAAW,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,EACzE,OAAO,EAAE,GAAG,EAAE;gCACZ,SAAS,CAAC,KAAK,CAAC,CAAA;4BAClB,CAAC,GACD,GACE,EACN,iBACE,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,GAAG,EAAE;4BACZ,SAAS,CAAC,KAAK,CAAC,CAAA;wBAClB,CAAC,EACD,SAAS,EAAC,yFAAyF,uBAG5F,IACL,CACP,EAEA,WAAW,CAAC,KAAK,KAAK,IAAI,IAAI,KAAC,UAAU,IAAC,KAAK,EAAE,WAAW,CAAC,KAAK,GAAI,EAEtE,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC,CACvB,KAAC,YAAY,IAAC,KAAK,EAAC,qBAAgB,GAAG,CACxC,CAAC,CAAC,CAAC,WAAW,CAAC,WAAW,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CACpD,aAAG,SAAS,EAAC,4BAA4B,gDACP,yBAAyB,CAAC,UAAU,CAAC,CAAC,WAAW,EAAE,2CAEjF,CACL,CAAC,CAAC,CAAC,CACF,aAAI,SAAS,EAAC,iDAAiD,YAC5D,WAAW,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,CAC3C,KAAC,aAAa,IAAqB,UAAU,EAAE,UAAU,IAArC,UAAU,CAAC,EAAE,CAA4B,CAC9D,CAAC,GACC,CACN,IACO,CACX,CAAA;AACH,CAAC;AAED,SAAS,aAAa,CAAC,EACrB,UAAU,GAGX;IACC,MAAM,MAAM,GAAG,mBAAmB,EAAE,CAAA;IAEpC,OAAO,CACL,cAAI,SAAS,EAAC,gDAAgD,aAC5D,eAAK,SAAS,EAAC,mDAAmD,aAChE,KAAC,IAAI,IACH,EAAE,EAAE,UAAU,UAAU,CAAC,MAAM,EAAE,EACjC,SAAS,EAAC,8DAA8D,YAEvE,UAAU,CAAC,QAAQ,GACf,EACP,iBACE,IAAI,EAAC,QAAQ,EACb,QAAQ,EAAE,MAAM,CAAC,SAAS,EAC1B,OAAO,EAAE,GAAG,EAAE;4BACZ,MAAM,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC,MAAM,EAAE,EAAE,EAAE,UAAU,CAAC,EAAE,EAAE,CAAC,CAAA;wBAC9D,CAAC,EACD,SAAS,EAAC,yEAAyE,uBAG5E,IACL,EAEL,MAAM,CAAC,KAAK,KAAK,IAAI,IAAI,CACxB,cAAK,SAAS,EAAC,MAAM,YACnB,KAAC,UAAU,IAAC,KAAK,EAAE,MAAM,CAAC,KAAK,GAAI,GAC/B,CACP,IACE,CACN,CAAA;AACH,CAAC;AAED,SAAS,UAAU,CAAC,EAClB,UAAU,EACV,QAAQ,EACR,cAAc,EACd,OAAO,GAMR;IACC,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAA;IACxC,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,EAAE,CAAA;IAC1B,0EAA0E;IAC1E,mEAAmE;IACnE,MAAM,KAAK,GAAG,QAAQ,CAAC;QACrB,UAAU;QACV,IAAI,EAAE,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS;KACzC,CAAC,CAAA;IACF,MAAM,SAAS,GAAG,gBAAgB,EAAE,CAAA;IAEpC,MAAM,OAAO,GAA4B,KAAK,CAAC,OAAO;SACnD,MAAM,CAAC,CAAC,GAAS,EAAE,EAAE,CAAC,CAAC,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;SAClD,GAAG,CAAC,CAAC,GAAS,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,KAAK,EAAE,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,CAAA;IAExD,SAAS,IAAI,CAAC,MAAc;QAC1B,SAAS;aACN,QAAQ,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,UAAU,EAAE,QAAQ,EAAE,EAAE,CAAC;aACrD,IAAI,CAAC,OAAO,CAAC;aACb,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAA;IAC3B,CAAC;IAED,OAAO,CACL,0BACE,KAAC,YAAY,IACX,OAAO,EAAE,OAAO,EAChB,KAAK,EAAC,EAAE,EACR,QAAQ,EAAE,IAAI,EACd,aAAa,EAAE,SAAS,EACxB,WAAW,EAAC,oBAAe,EAC3B,YAAY,EAAC,mBAAmB,EAChC,IAAI,EAAC,IAAI,GACT,EACD,SAAS,CAAC,KAAK,KAAK,IAAI,IAAI,CAC3B,cAAK,SAAS,EAAC,MAAM,YACnB,KAAC,UAAU,IAAC,KAAK,EAAE,SAAS,CAAC,KAAK,GAAI,GAClC,CACP,IACG,CACP,CAAA;AACH,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NotesPanel.d.ts","sourceRoot":"","sources":["../../src/components/NotesPanel.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAQ,gBAAgB,EAAE,MAAM,iBAAiB,CAAA;
|
|
1
|
+
{"version":3,"file":"NotesPanel.d.ts","sourceRoot":"","sources":["../../src/components/NotesPanel.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAQ,gBAAgB,EAAE,MAAM,iBAAiB,CAAA;AAY7D;;;;;;;;;GASG;AAEH,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,UAAU,EAAE,gBAAgB,CAAA;IACrC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;CAC1B;AAED,wBAAgB,UAAU,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,EAAE,eAAe,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,CA8FvF"}
|
|
@@ -4,6 +4,7 @@ import { useTimezone } from '../api/resources/account.js';
|
|
|
4
4
|
import { useMembers } from '../api/resources/members.js';
|
|
5
5
|
import { useCreateNote, useNotes } from '../api/resources/notes.js';
|
|
6
6
|
import { formatDateTime } from '../lib/dates.js';
|
|
7
|
+
import { Paginator } from './Paginator.js';
|
|
7
8
|
import { ErrorPanel } from './QueryState.js';
|
|
8
9
|
import { SectionHeader } from './SectionHeader.js';
|
|
9
10
|
export function NotesPanel({ targetType, targetId }) {
|
|
@@ -13,10 +14,10 @@ export function NotesPanel({ targetType, targetId }) {
|
|
|
13
14
|
const [adding, setAdding] = useState(false);
|
|
14
15
|
const [body, setBody] = useState('');
|
|
15
16
|
// Pinned first, then newest. The list arrives in `-created_at` order and the
|
|
16
|
-
// API has no two-column sort, so this reorders what is
|
|
17
|
-
//
|
|
18
|
-
//
|
|
19
|
-
//
|
|
17
|
+
// API has no two-column sort, so this reorders what is on this page. Across
|
|
18
|
+
// page boundaries a pinned note on a later page sorts after unpinned ones on
|
|
19
|
+
// an earlier one; pinned notes are few enough that this is the cheaper wrong
|
|
20
|
+
// than a second request per panel.
|
|
20
21
|
const ordered = [...notes.records].sort((left, right) => Number(right.pinned) - Number(left.pinned));
|
|
21
22
|
function reset() {
|
|
22
23
|
setAdding(false);
|
|
@@ -35,7 +36,7 @@ export function NotesPanel({ targetType, targetId }) {
|
|
|
35
36
|
setAdding((current) => !current);
|
|
36
37
|
}, addLabel: "Add note" }), createNote.error !== null && (_jsx("div", { className: "mb-3", children: _jsx(ErrorPanel, { error: createNote.error }) })), notes.error !== null && _jsx(ErrorPanel, { error: notes.error }), adding && (_jsxs("form", { onSubmit: submit, className: "mb-3 space-y-2", children: [_jsx("textarea", { value: body, onChange: (event) => {
|
|
37
38
|
setBody(event.target.value);
|
|
38
|
-
}, placeholder: "Write a note\u2026", rows: 3, autoFocus: true, className: "w-full resize-y rounded-md border border-border bg-surface-raised px-3 py-2 text-[13px] outline-none focus:border-accent focus:ring-2 focus:ring-accent/20" }), _jsxs("div", { className: "flex justify-end gap-2", children: [_jsx("button", { type: "button", onClick: reset, className: "rounded-md px-2.5 py-1 text-[12px] font-medium text-ink-muted hover:text-ink", children: "Cancel" }), _jsx("button", { type: "submit", className: "rounded-md bg-accent px-3 py-1.5 text-[12px] font-semibold text-accent-fg hover:bg-accent-hover", children: "Save note" })] })] })), notes.isLoading && _jsx("p", { className: "text-[13px] text-ink-faint", children: "Loading notes\u2026" }), !notes.isLoading && ordered.length === 0 && !adding ? (_jsx("p", { className: "text-[13px] text-ink-faint", children: "No notes yet." })) : (_jsx("ul", { className: "flex flex-col gap-3", children: ordered.map((note) => (_jsx(NoteItem, { note: note, authorName: authorNameFor(note, members.nameById) }, note.id))) })),
|
|
39
|
+
}, placeholder: "Write a note\u2026", rows: 3, autoFocus: true, className: "w-full resize-y rounded-md border border-border bg-surface-raised px-3 py-2 text-[13px] outline-none focus:border-accent focus:ring-2 focus:ring-accent/20" }), _jsxs("div", { className: "flex justify-end gap-2", children: [_jsx("button", { type: "button", onClick: reset, className: "rounded-md px-2.5 py-1 text-[12px] font-medium text-ink-muted hover:text-ink", children: "Cancel" }), _jsx("button", { type: "submit", className: "rounded-md bg-accent px-3 py-1.5 text-[12px] font-semibold text-accent-fg hover:bg-accent-hover", children: "Save note" })] })] })), notes.isLoading && _jsx("p", { className: "text-[13px] text-ink-faint", children: "Loading notes\u2026" }), !notes.isLoading && ordered.length === 0 && !adding ? (_jsx("p", { className: "text-[13px] text-ink-faint", children: "No notes yet." })) : (_jsx("ul", { className: "flex flex-col gap-3", children: ordered.map((note) => (_jsx(NoteItem, { note: note, authorName: authorNameFor(note, members.nameById) }, note.id))) })), _jsx(Paginator, { list: notes })] }));
|
|
39
40
|
}
|
|
40
41
|
/**
|
|
41
42
|
* A null author is a note written by a workspace API key, which belongs to the
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NotesPanel.js","sourceRoot":"","sources":["../../src/components/NotesPanel.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAGhC,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAA;AACzD,OAAO,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAA;AACxD,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAA;AACnE,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAA;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAkB,CAAA;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAqB,CAAA;AAkBnD,MAAM,UAAU,UAAU,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAmB;IAClE,MAAM,KAAK,GAAG,QAAQ,CAAC,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAA;IAC7D,MAAM,OAAO,GAAG,UAAU,EAAE,CAAA;IAC5B,MAAM,UAAU,GAAG,aAAa,EAAE,CAAA;IAClC,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAA;IAC3C,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAA;IAEpC,6EAA6E;IAC7E,
|
|
1
|
+
{"version":3,"file":"NotesPanel.js","sourceRoot":"","sources":["../../src/components/NotesPanel.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { Paged } from '../api/resource.ts';
|
|
2
|
+
/**
|
|
3
|
+
* Prev / Next with a page indicator and an optional page size selector.
|
|
4
|
+
*
|
|
5
|
+
* The API is cursor-only (`api.md`), so there is no total count and no jump
|
|
6
|
+
* to page N. `pageIndex` is one-based on screen but zero-based in `Paged` —
|
|
7
|
+
* the label adds one so page 1 does not read as page 0.
|
|
8
|
+
*
|
|
9
|
+
* `Prev` disables when nothing came before, `Next` when the server said the
|
|
10
|
+
* current page was the last one. A cached prior page is instant; going past
|
|
11
|
+
* the fetched set kicks off exactly one fetch, and both buttons hold their
|
|
12
|
+
* disabled state until it settles so a fast double click does not skip two.
|
|
13
|
+
*/
|
|
14
|
+
export interface PaginatorProps {
|
|
15
|
+
readonly list: Paged;
|
|
16
|
+
/** Options offered by the page size selector. Omit to hide the selector. */
|
|
17
|
+
readonly pageSizes?: readonly number[];
|
|
18
|
+
/**
|
|
19
|
+
* Where on the list this paginator sits. `top` places it above the rows —
|
|
20
|
+
* the per-page selector then defers to the `bottom` copy so the two do not
|
|
21
|
+
* duplicate the same control side by side.
|
|
22
|
+
*/
|
|
23
|
+
readonly placement?: 'top' | 'bottom';
|
|
24
|
+
}
|
|
25
|
+
export declare function Paginator({ list, pageSizes, placement, }: PaginatorProps): React.JSX.Element;
|
|
26
|
+
//# sourceMappingURL=Paginator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Paginator.d.ts","sourceRoot":"","sources":["../../src/components/Paginator.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAA;AAE/C;;;;;;;;;;;GAWG;AAEH,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAA;IACpB,4EAA4E;IAC5E,QAAQ,CAAC,SAAS,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;IACtC;;;;OAIG;IACH,QAAQ,CAAC,SAAS,CAAC,EAAE,KAAK,GAAG,QAAQ,CAAA;CACtC;AAOD,wBAAgB,SAAS,CAAC,EACxB,IAAI,EACJ,SAA8B,EAC9B,SAAoB,GACrB,EAAE,cAAc,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,CAyCpC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
const DEFAULT_PAGE_SIZES = [25, 50, 100, 200];
|
|
3
|
+
const buttonClass = 'rounded-md border border-border bg-surface-raised px-2.5 py-1 text-[12px] font-medium text-ink transition hover:border-border-strong hover:bg-surface-sunken disabled:cursor-not-allowed disabled:opacity-40 disabled:hover:border-border disabled:hover:bg-surface-raised';
|
|
4
|
+
export function Paginator({ list, pageSizes = DEFAULT_PAGE_SIZES, placement = 'bottom', }) {
|
|
5
|
+
const prevDisabled = !list.hasPrev || list.isChangingPage;
|
|
6
|
+
const nextDisabled = !list.hasNext || list.isChangingPage;
|
|
7
|
+
const options = pageSizes.includes(list.pageSize) ? pageSizes : [...pageSizes, list.pageSize].sort((a, b) => a - b);
|
|
8
|
+
const showPageSize = placement === 'bottom' && pageSizes.length > 0;
|
|
9
|
+
const wrapperClass = placement === 'top'
|
|
10
|
+
? 'mt-3 mb-3 flex flex-wrap items-center gap-3 text-[12px] text-ink-muted'
|
|
11
|
+
: 'mt-3 flex flex-wrap items-center gap-3 text-[12px] text-ink-muted';
|
|
12
|
+
return (_jsxs("div", { className: wrapperClass, children: [_jsxs("div", { className: "flex items-center gap-1", children: [_jsx("button", { type: "button", onClick: list.prevPage, disabled: prevDisabled, className: buttonClass, children: "Prev" }), _jsx("button", { type: "button", onClick: list.nextPage, disabled: nextDisabled, className: buttonClass, children: list.isChangingPage ? 'Loading…' : 'Next' })] }), _jsxs("span", { "aria-live": "polite", children: ["Page ", list.pageIndex + 1] }), showPageSize && (_jsxs("label", { className: "ml-auto flex items-center gap-2", children: [_jsx("span", { children: "Per page" }), _jsx("select", { value: list.pageSize, onChange: (event) => {
|
|
13
|
+
list.setPageSize(Number(event.target.value));
|
|
14
|
+
}, className: "rounded-md border border-border bg-surface-raised px-2 py-1 text-[12px] outline-none focus:border-accent", children: options.map((size) => (_jsx("option", { value: size, children: size }, size))) })] }))] }));
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=Paginator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Paginator.js","sourceRoot":"","sources":["../../src/components/Paginator.tsx"],"names":[],"mappings":";AA2BA,MAAM,kBAAkB,GAAsB,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC,CAAA;AAEhE,MAAM,WAAW,GACf,4QAA4Q,CAAA;AAE9Q,MAAM,UAAU,SAAS,CAAC,EACxB,IAAI,EACJ,SAAS,GAAG,kBAAkB,EAC9B,SAAS,GAAG,QAAQ,GACL;IACf,MAAM,YAAY,GAAG,CAAC,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,cAAc,CAAA;IACzD,MAAM,YAAY,GAAG,CAAC,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,cAAc,CAAA;IACzD,MAAM,OAAO,GAAG,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,GAAG,SAAS,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAA;IACnH,MAAM,YAAY,GAAG,SAAS,KAAK,QAAQ,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,CAAA;IACnE,MAAM,YAAY,GAChB,SAAS,KAAK,KAAK;QACjB,CAAC,CAAC,wEAAwE;QAC1E,CAAC,CAAC,mEAAmE,CAAA;IAEzE,OAAO,CACL,eAAK,SAAS,EAAE,YAAY,aAC1B,eAAK,SAAS,EAAC,yBAAyB,aACtC,iBAAQ,IAAI,EAAC,QAAQ,EAAC,OAAO,EAAE,IAAI,CAAC,QAAQ,EAAE,QAAQ,EAAE,YAAY,EAAE,SAAS,EAAE,WAAW,qBAEnF,EACT,iBAAQ,IAAI,EAAC,QAAQ,EAAC,OAAO,EAAE,IAAI,CAAC,QAAQ,EAAE,QAAQ,EAAE,YAAY,EAAE,SAAS,EAAE,WAAW,YACzF,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,GACnC,IACL,EACN,6BAAgB,QAAQ,sBAAO,IAAI,CAAC,SAAS,GAAG,CAAC,IAAQ,EACxD,YAAY,IAAI,CACf,iBAAO,SAAS,EAAC,iCAAiC,aAChD,sCAAqB,EACrB,iBACE,KAAK,EAAE,IAAI,CAAC,QAAQ,EACpB,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE;4BAClB,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAA;wBAC9C,CAAC,EACD,SAAS,EAAC,0GAA0G,YAEnH,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CACrB,iBAAmB,KAAK,EAAE,IAAI,YAC3B,IAAI,IADM,IAAI,CAER,CACV,CAAC,GACK,IACH,CACT,IACG,CACP,CAAA;AACH,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { Deal, Opportunity, Partnership, PlanItem, Raise } from '@kelpie/schemas';
|
|
1
|
+
import type { Deal, Enquiry, Opportunity, Partnership, PlanItem, Raise } from '@kelpie/schemas';
|
|
2
2
|
export interface PlanAttentionProps {
|
|
3
3
|
readonly items: readonly PlanItem[];
|
|
4
4
|
/** Names the record each item belongs to. Off on a record's own page, where it is the same one every row. */
|
|
@@ -19,11 +19,12 @@ export declare function PlanAttention({ items, showTarget, targetNames, isLoadin
|
|
|
19
19
|
* @param deals The records to roll up, which the page has already fetched to
|
|
20
20
|
* render its own related list.
|
|
21
21
|
*/
|
|
22
|
-
export declare function RelatedPlanAttention({ deals, opportunities, raises, partnerships, isLoading, }: {
|
|
22
|
+
export declare function RelatedPlanAttention({ deals, opportunities, raises, partnerships, enquiries, isLoading, }: {
|
|
23
23
|
readonly deals: readonly Deal[];
|
|
24
24
|
readonly opportunities?: readonly Opportunity[];
|
|
25
25
|
readonly raises?: readonly Raise[];
|
|
26
26
|
readonly partnerships?: readonly Partnership[];
|
|
27
|
+
readonly enquiries?: readonly Enquiry[];
|
|
27
28
|
readonly isLoading: boolean;
|
|
28
29
|
}): React.JSX.Element;
|
|
29
30
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PlanAttention.d.ts","sourceRoot":"","sources":["../../src/components/PlanAttention.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"PlanAttention.d.ts","sourceRoot":"","sources":["../../src/components/PlanAttention.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,IAAI,EACJ,OAAO,EACP,WAAW,EACX,WAAW,EAEX,QAAQ,EACR,KAAK,EACN,MAAM,iBAAiB,CAAA;AA4BxB,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,KAAK,EAAE,SAAS,QAAQ,EAAE,CAAA;IACnC,6GAA6G;IAC7G,QAAQ,CAAC,UAAU,CAAC,EAAE,OAAO,CAAA;IAC7B,0FAA0F;IAC1F,QAAQ,CAAC,WAAW,CAAC,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAClD,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAA;CAC7B;AAED,wBAAgB,aAAa,CAAC,EAC5B,KAAK,EACL,UAAkB,EAClB,WAAW,EACX,SAAiB,GAClB,EAAE,kBAAkB,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,CAmCxC;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,oBAAoB,CAAC,EACnC,KAAK,EACL,aAAkB,EAClB,MAAW,EACX,YAAiB,EACjB,SAAc,EACd,SAAS,GACV,EAAE;IACD,QAAQ,CAAC,KAAK,EAAE,SAAS,IAAI,EAAE,CAAA;IAC/B,QAAQ,CAAC,aAAa,CAAC,EAAE,SAAS,WAAW,EAAE,CAAA;IAC/C,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,KAAK,EAAE,CAAA;IAClC,QAAQ,CAAC,YAAY,CAAC,EAAE,SAAS,WAAW,EAAE,CAAA;IAC9C,QAAQ,CAAC,SAAS,CAAC,EAAE,SAAS,OAAO,EAAE,CAAA;IACvC,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAA;CAC5B,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,CAkDpB;AAwED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,EAC7B,IAAI,EACJ,WAAW,GACZ,EAAE;IACD,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAA;IACvB,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,CAAA;CAC9D,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,CAiBpB"}
|