@kelpie/ui 0.1.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/LICENSE +661 -0
- package/README.md +44 -0
- package/dist/ServiceStatus.d.ts +6 -0
- package/dist/ServiceStatus.d.ts.map +1 -0
- package/dist/ServiceStatus.js +35 -0
- package/dist/ServiceStatus.js.map +1 -0
- package/dist/api/ApiProvider.d.ts +19 -0
- package/dist/api/ApiProvider.d.ts.map +1 -0
- package/dist/api/ApiProvider.js +18 -0
- package/dist/api/ApiProvider.js.map +1 -0
- package/dist/api/client.d.ts +83 -0
- package/dist/api/client.d.ts.map +1 -0
- package/dist/api/client.js +162 -0
- package/dist/api/client.js.map +1 -0
- package/dist/api/context.d.ts +14 -0
- package/dist/api/context.d.ts.map +1 -0
- package/dist/api/context.js +20 -0
- package/dist/api/context.js.map +1 -0
- package/dist/api/errors.d.ts +9 -0
- package/dist/api/errors.d.ts.map +1 -0
- package/dist/api/errors.js +14 -0
- package/dist/api/errors.js.map +1 -0
- package/dist/api/health.d.ts +15 -0
- package/dist/api/health.d.ts.map +1 -0
- package/dist/api/health.js +22 -0
- package/dist/api/health.js.map +1 -0
- package/dist/api/json.d.ts +3 -0
- package/dist/api/json.d.ts.map +1 -0
- package/dist/api/json.js +5 -0
- package/dist/api/json.js.map +1 -0
- package/dist/api/queryClient.d.ts +17 -0
- package/dist/api/queryClient.d.ts.map +1 -0
- package/dist/api/queryClient.js +33 -0
- package/dist/api/queryClient.js.map +1 -0
- package/dist/api/resource.d.ts +110 -0
- package/dist/api/resource.d.ts.map +1 -0
- package/dist/api/resource.js +238 -0
- package/dist/api/resource.js.map +1 -0
- package/dist/api/resources/account.d.ts +49 -0
- package/dist/api/resources/account.d.ts.map +1 -0
- package/dist/api/resources/account.js +146 -0
- package/dist/api/resources/account.js.map +1 -0
- package/dist/api/resources/activities.d.ts +8 -0
- package/dist/api/resources/activities.d.ts.map +1 -0
- package/dist/api/resources/activities.js +21 -0
- package/dist/api/resources/activities.js.map +1 -0
- package/dist/api/resources/agentTasks.d.ts +31 -0
- package/dist/api/resources/agentTasks.d.ts.map +1 -0
- package/dist/api/resources/agentTasks.js +103 -0
- package/dist/api/resources/agentTasks.js.map +1 -0
- package/dist/api/resources/candidates.d.ts +17 -0
- package/dist/api/resources/candidates.d.ts.map +1 -0
- package/dist/api/resources/candidates.js +40 -0
- package/dist/api/resources/candidates.js.map +1 -0
- package/dist/api/resources/companies.d.ts +22 -0
- package/dist/api/resources/companies.d.ts.map +1 -0
- package/dist/api/resources/companies.js +36 -0
- package/dist/api/resources/companies.js.map +1 -0
- package/dist/api/resources/dashboard.d.ts +8 -0
- package/dist/api/resources/dashboard.d.ts.map +1 -0
- package/dist/api/resources/dashboard.js +27 -0
- package/dist/api/resources/dashboard.js.map +1 -0
- package/dist/api/resources/deals.d.ts +30 -0
- package/dist/api/resources/deals.d.ts.map +1 -0
- package/dist/api/resources/deals.js +38 -0
- package/dist/api/resources/deals.js.map +1 -0
- package/dist/api/resources/decisions.d.ts +13 -0
- package/dist/api/resources/decisions.d.ts.map +1 -0
- package/dist/api/resources/decisions.js +38 -0
- package/dist/api/resources/decisions.js.map +1 -0
- package/dist/api/resources/forms.d.ts +82 -0
- package/dist/api/resources/forms.d.ts.map +1 -0
- package/dist/api/resources/forms.js +129 -0
- package/dist/api/resources/forms.js.map +1 -0
- package/dist/api/resources/handbookPages.d.ts +33 -0
- package/dist/api/resources/handbookPages.d.ts.map +1 -0
- package/dist/api/resources/handbookPages.js +49 -0
- package/dist/api/resources/handbookPages.js.map +1 -0
- package/dist/api/resources/importJobs.d.ts +72 -0
- package/dist/api/resources/importJobs.d.ts.map +1 -0
- package/dist/api/resources/importJobs.js +145 -0
- package/dist/api/resources/importJobs.js.map +1 -0
- package/dist/api/resources/invites.d.ts +19 -0
- package/dist/api/resources/invites.d.ts.map +1 -0
- package/dist/api/resources/invites.js +78 -0
- package/dist/api/resources/invites.js.map +1 -0
- package/dist/api/resources/mcpTools.d.ts +8 -0
- package/dist/api/resources/mcpTools.d.ts.map +1 -0
- package/dist/api/resources/mcpTools.js +23 -0
- package/dist/api/resources/mcpTools.js.map +1 -0
- package/dist/api/resources/members.d.ts +40 -0
- package/dist/api/resources/members.d.ts.map +1 -0
- package/dist/api/resources/members.js +67 -0
- package/dist/api/resources/members.js.map +1 -0
- package/dist/api/resources/moduleSettings.d.ts +14 -0
- package/dist/api/resources/moduleSettings.d.ts.map +1 -0
- package/dist/api/resources/moduleSettings.js +43 -0
- package/dist/api/resources/moduleSettings.js.map +1 -0
- package/dist/api/resources/mutation.d.ts +18 -0
- package/dist/api/resources/mutation.d.ts.map +1 -0
- package/dist/api/resources/mutation.js +12 -0
- package/dist/api/resources/mutation.js.map +1 -0
- package/dist/api/resources/notes.d.ts +14 -0
- package/dist/api/resources/notes.d.ts.map +1 -0
- package/dist/api/resources/notes.js +39 -0
- package/dist/api/resources/notes.js.map +1 -0
- package/dist/api/resources/opportunities.d.ts +29 -0
- package/dist/api/resources/opportunities.d.ts.map +1 -0
- package/dist/api/resources/opportunities.js +38 -0
- package/dist/api/resources/opportunities.js.map +1 -0
- package/dist/api/resources/partnerships.d.ts +33 -0
- package/dist/api/resources/partnerships.d.ts.map +1 -0
- package/dist/api/resources/partnerships.js +39 -0
- package/dist/api/resources/partnerships.js.map +1 -0
- package/dist/api/resources/people.d.ts +22 -0
- package/dist/api/resources/people.d.ts.map +1 -0
- package/dist/api/resources/people.js +36 -0
- package/dist/api/resources/people.js.map +1 -0
- package/dist/api/resources/pipelineStages.d.ts +22 -0
- package/dist/api/resources/pipelineStages.d.ts.map +1 -0
- package/dist/api/resources/pipelineStages.js +61 -0
- package/dist/api/resources/pipelineStages.js.map +1 -0
- package/dist/api/resources/planItems.d.ts +31 -0
- package/dist/api/resources/planItems.d.ts.map +1 -0
- package/dist/api/resources/planItems.js +60 -0
- package/dist/api/resources/planItems.js.map +1 -0
- package/dist/api/resources/positions.d.ts +23 -0
- package/dist/api/resources/positions.d.ts.map +1 -0
- package/dist/api/resources/positions.js +31 -0
- package/dist/api/resources/positions.js.map +1 -0
- package/dist/api/resources/raises.d.ts +30 -0
- package/dist/api/resources/raises.d.ts.map +1 -0
- package/dist/api/resources/raises.js +38 -0
- package/dist/api/resources/raises.js.map +1 -0
- package/dist/api/resources/roles.d.ts +20 -0
- package/dist/api/resources/roles.d.ts.map +1 -0
- package/dist/api/resources/roles.js +31 -0
- package/dist/api/resources/roles.js.map +1 -0
- package/dist/api/resources/search.d.ts +12 -0
- package/dist/api/resources/search.d.ts.map +1 -0
- package/dist/api/resources/search.js +37 -0
- package/dist/api/resources/search.js.map +1 -0
- package/dist/api/resources/session.d.ts +58 -0
- package/dist/api/resources/session.d.ts.map +1 -0
- package/dist/api/resources/session.js +157 -0
- package/dist/api/resources/session.js.map +1 -0
- package/dist/api/resources/webhooks.d.ts +45 -0
- package/dist/api/resources/webhooks.d.ts.map +1 -0
- package/dist/api/resources/webhooks.js +106 -0
- package/dist/api/resources/webhooks.js.map +1 -0
- package/dist/api/resources/workspace.d.ts +20 -0
- package/dist/api/resources/workspace.d.ts.map +1 -0
- package/dist/api/resources/workspace.js +63 -0
- package/dist/api/resources/workspace.js.map +1 -0
- package/dist/app/KelpieApp.d.ts +18 -0
- package/dist/app/KelpieApp.d.ts.map +1 -0
- package/dist/app/KelpieApp.js +59 -0
- package/dist/app/KelpieApp.js.map +1 -0
- package/dist/app/SessionGate.d.ts +14 -0
- package/dist/app/SessionGate.d.ts.map +1 -0
- package/dist/app/SessionGate.js +33 -0
- package/dist/app/SessionGate.js.map +1 -0
- package/dist/components/ActivitiesPanel.d.ts +28 -0
- package/dist/components/ActivitiesPanel.d.ts.map +1 -0
- package/dist/components/ActivitiesPanel.js +75 -0
- package/dist/components/ActivitiesPanel.js.map +1 -0
- package/dist/components/AgentTasks.d.ts +16 -0
- package/dist/components/AgentTasks.d.ts.map +1 -0
- package/dist/components/AgentTasks.js +166 -0
- package/dist/components/AgentTasks.js.map +1 -0
- package/dist/components/Chip.d.ts +10 -0
- package/dist/components/Chip.d.ts.map +1 -0
- package/dist/components/Chip.js +21 -0
- package/dist/components/Chip.js.map +1 -0
- package/dist/components/CopyButton.d.ts +7 -0
- package/dist/components/CopyButton.d.ts.map +1 -0
- package/dist/components/CopyButton.js +30 -0
- package/dist/components/CopyButton.js.map +1 -0
- package/dist/components/DataTable.d.ts +36 -0
- package/dist/components/DataTable.d.ts.map +1 -0
- package/dist/components/DataTable.js +43 -0
- package/dist/components/DataTable.js.map +1 -0
- package/dist/components/DecisionsPanel.d.ts +14 -0
- package/dist/components/DecisionsPanel.d.ts.map +1 -0
- package/dist/components/DecisionsPanel.js +73 -0
- package/dist/components/DecisionsPanel.js.map +1 -0
- package/dist/components/DeleteRecord.d.ts +19 -0
- package/dist/components/DeleteRecord.d.ts.map +1 -0
- package/dist/components/DeleteRecord.js +22 -0
- package/dist/components/DeleteRecord.js.map +1 -0
- package/dist/components/EntitySearch.d.ts +33 -0
- package/dist/components/EntitySearch.d.ts.map +1 -0
- package/dist/components/EntitySearch.js +111 -0
- package/dist/components/EntitySearch.js.map +1 -0
- package/dist/components/ErrorBoundary.d.ts +21 -0
- package/dist/components/ErrorBoundary.d.ts.map +1 -0
- package/dist/components/ErrorBoundary.js +26 -0
- package/dist/components/ErrorBoundary.js.map +1 -0
- package/dist/components/InlineEdit.d.ts +37 -0
- package/dist/components/InlineEdit.d.ts.map +1 -0
- package/dist/components/InlineEdit.js +77 -0
- package/dist/components/InlineEdit.js.map +1 -0
- package/dist/components/KanbanBoard.d.ts +24 -0
- package/dist/components/KanbanBoard.d.ts.map +1 -0
- package/dist/components/KanbanBoard.js +92 -0
- package/dist/components/KanbanBoard.js.map +1 -0
- package/dist/components/MarkdownView.d.ts +4 -0
- package/dist/components/MarkdownView.d.ts.map +1 -0
- package/dist/components/MarkdownView.js +45 -0
- package/dist/components/MarkdownView.js.map +1 -0
- package/dist/components/NotesPanel.d.ts +17 -0
- package/dist/components/NotesPanel.d.ts.map +1 -0
- package/dist/components/NotesPanel.js +53 -0
- package/dist/components/NotesPanel.js.map +1 -0
- package/dist/components/PageHeader.d.ts +20 -0
- package/dist/components/PageHeader.d.ts.map +1 -0
- package/dist/components/PageHeader.js +15 -0
- package/dist/components/PageHeader.js.map +1 -0
- package/dist/components/PhonesField.d.ts +7 -0
- package/dist/components/PhonesField.d.ts.map +1 -0
- package/dist/components/PhonesField.js +92 -0
- package/dist/components/PhonesField.js.map +1 -0
- package/dist/components/PlanAttention.d.ts +40 -0
- package/dist/components/PlanAttention.d.ts.map +1 -0
- package/dist/components/PlanAttention.js +86 -0
- package/dist/components/PlanAttention.js.map +1 -0
- package/dist/components/PlanPanel.d.ts +18 -0
- package/dist/components/PlanPanel.d.ts.map +1 -0
- package/dist/components/PlanPanel.js +102 -0
- package/dist/components/PlanPanel.js.map +1 -0
- package/dist/components/QueryState.d.ts +24 -0
- package/dist/components/QueryState.d.ts.map +1 -0
- package/dist/components/QueryState.js +34 -0
- package/dist/components/QueryState.js.map +1 -0
- package/dist/components/RecordTabs.d.ts +16 -0
- package/dist/components/RecordTabs.d.ts.map +1 -0
- package/dist/components/RecordTabs.js +15 -0
- package/dist/components/RecordTabs.js.map +1 -0
- package/dist/components/SectionHeader.d.ts +15 -0
- package/dist/components/SectionHeader.d.ts.map +1 -0
- package/dist/components/SectionHeader.js +14 -0
- package/dist/components/SectionHeader.js.map +1 -0
- package/dist/components/SegmentedControl.d.ts +13 -0
- package/dist/components/SegmentedControl.d.ts.map +1 -0
- package/dist/components/SegmentedControl.js +14 -0
- package/dist/components/SegmentedControl.js.map +1 -0
- package/dist/components/Shell.d.ts +2 -0
- package/dist/components/Shell.d.ts.map +1 -0
- package/dist/components/Shell.js +143 -0
- package/dist/components/Shell.js.map +1 -0
- package/dist/components/SidebarField.d.ts +8 -0
- package/dist/components/SidebarField.d.ts.map +1 -0
- package/dist/components/SidebarField.js +6 -0
- package/dist/components/SidebarField.js.map +1 -0
- package/dist/components/SocialProfilesField.d.ts +8 -0
- package/dist/components/SocialProfilesField.d.ts.map +1 -0
- package/dist/components/SocialProfilesField.js +176 -0
- package/dist/components/SocialProfilesField.js.map +1 -0
- package/dist/components/StageSettings.d.ts +16 -0
- package/dist/components/StageSettings.d.ts.map +1 -0
- package/dist/components/StageSettings.js +107 -0
- package/dist/components/StageSettings.js.map +1 -0
- package/dist/components/SummaryBlock.d.ts +12 -0
- package/dist/components/SummaryBlock.d.ts.map +1 -0
- package/dist/components/SummaryBlock.js +12 -0
- package/dist/components/SummaryBlock.js.map +1 -0
- package/dist/index.d.ts +90 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +55 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/dates.d.ts +26 -0
- package/dist/lib/dates.d.ts.map +1 -0
- package/dist/lib/dates.js +71 -0
- package/dist/lib/dates.js.map +1 -0
- package/dist/lib/money.d.ts +7 -0
- package/dist/lib/money.d.ts.map +1 -0
- package/dist/lib/money.js +13 -0
- package/dist/lib/money.js.map +1 -0
- package/dist/lib/names.d.ts +9 -0
- package/dist/lib/names.d.ts.map +1 -0
- package/dist/lib/names.js +13 -0
- package/dist/lib/names.js.map +1 -0
- package/dist/lib/plan.d.ts +67 -0
- package/dist/lib/plan.d.ts.map +1 -0
- package/dist/lib/plan.js +96 -0
- package/dist/lib/plan.js.map +1 -0
- package/dist/lib/theme.d.ts +19 -0
- package/dist/lib/theme.d.ts.map +1 -0
- package/dist/lib/theme.js +30 -0
- package/dist/lib/theme.js.map +1 -0
- package/dist/pages/CompaniesPage.d.ts +2 -0
- package/dist/pages/CompaniesPage.d.ts.map +1 -0
- package/dist/pages/CompaniesPage.js +77 -0
- package/dist/pages/CompaniesPage.js.map +1 -0
- package/dist/pages/CompanyDetail.d.ts +2 -0
- package/dist/pages/CompanyDetail.d.ts.map +1 -0
- package/dist/pages/CompanyDetail.js +177 -0
- package/dist/pages/CompanyDetail.js.map +1 -0
- package/dist/pages/DealDetail.d.ts +2 -0
- package/dist/pages/DealDetail.d.ts.map +1 -0
- package/dist/pages/DealDetail.js +192 -0
- package/dist/pages/DealDetail.js.map +1 -0
- package/dist/pages/DealStageSettingsPage.d.ts +7 -0
- package/dist/pages/DealStageSettingsPage.d.ts.map +1 -0
- package/dist/pages/DealStageSettingsPage.js +38 -0
- package/dist/pages/DealStageSettingsPage.js.map +1 -0
- package/dist/pages/DealsPage.d.ts +2 -0
- package/dist/pages/DealsPage.d.ts.map +1 -0
- package/dist/pages/DealsPage.js +177 -0
- package/dist/pages/DealsPage.js.map +1 -0
- package/dist/pages/DecisionsPage.d.ts +2 -0
- package/dist/pages/DecisionsPage.d.ts.map +1 -0
- package/dist/pages/DecisionsPage.js +121 -0
- package/dist/pages/DecisionsPage.js.map +1 -0
- package/dist/pages/FormDetail.d.ts +2 -0
- package/dist/pages/FormDetail.d.ts.map +1 -0
- package/dist/pages/FormDetail.js +56 -0
- package/dist/pages/FormDetail.js.map +1 -0
- package/dist/pages/FormsPage.d.ts +2 -0
- package/dist/pages/FormsPage.d.ts.map +1 -0
- package/dist/pages/FormsPage.js +67 -0
- package/dist/pages/FormsPage.js.map +1 -0
- package/dist/pages/FundraisingPage.d.ts +2 -0
- package/dist/pages/FundraisingPage.d.ts.map +1 -0
- package/dist/pages/FundraisingPage.js +187 -0
- package/dist/pages/FundraisingPage.js.map +1 -0
- package/dist/pages/HiringPage.d.ts +9 -0
- package/dist/pages/HiringPage.d.ts.map +1 -0
- package/dist/pages/HiringPage.js +73 -0
- package/dist/pages/HiringPage.js.map +1 -0
- package/dist/pages/NotFoundPage.d.ts +10 -0
- package/dist/pages/NotFoundPage.d.ts.map +1 -0
- package/dist/pages/NotFoundPage.js +14 -0
- package/dist/pages/NotFoundPage.js.map +1 -0
- package/dist/pages/OpportunitiesPage.d.ts +2 -0
- package/dist/pages/OpportunitiesPage.d.ts.map +1 -0
- package/dist/pages/OpportunitiesPage.js +184 -0
- package/dist/pages/OpportunitiesPage.js.map +1 -0
- package/dist/pages/OpportunityDetail.d.ts +2 -0
- package/dist/pages/OpportunityDetail.d.ts.map +1 -0
- package/dist/pages/OpportunityDetail.js +132 -0
- package/dist/pages/OpportunityDetail.js.map +1 -0
- package/dist/pages/OpportunityStageSettingsPage.d.ts +3 -0
- package/dist/pages/OpportunityStageSettingsPage.d.ts.map +1 -0
- package/dist/pages/OpportunityStageSettingsPage.js +34 -0
- package/dist/pages/OpportunityStageSettingsPage.js.map +1 -0
- package/dist/pages/PartnershipDetail.d.ts +2 -0
- package/dist/pages/PartnershipDetail.d.ts.map +1 -0
- package/dist/pages/PartnershipDetail.js +179 -0
- package/dist/pages/PartnershipDetail.js.map +1 -0
- package/dist/pages/PartnershipStageSettingsPage.d.ts +3 -0
- package/dist/pages/PartnershipStageSettingsPage.d.ts.map +1 -0
- package/dist/pages/PartnershipStageSettingsPage.js +34 -0
- package/dist/pages/PartnershipStageSettingsPage.js.map +1 -0
- package/dist/pages/PartnershipsPage.d.ts +2 -0
- package/dist/pages/PartnershipsPage.d.ts.map +1 -0
- package/dist/pages/PartnershipsPage.js +182 -0
- package/dist/pages/PartnershipsPage.js.map +1 -0
- package/dist/pages/PeoplePage.d.ts +10 -0
- package/dist/pages/PeoplePage.d.ts.map +1 -0
- package/dist/pages/PeoplePage.js +71 -0
- package/dist/pages/PeoplePage.js.map +1 -0
- package/dist/pages/PersonDetail.d.ts +2 -0
- package/dist/pages/PersonDetail.d.ts.map +1 -0
- package/dist/pages/PersonDetail.js +193 -0
- package/dist/pages/PersonDetail.js.map +1 -0
- package/dist/pages/PlanningPage.d.ts +2 -0
- package/dist/pages/PlanningPage.d.ts.map +1 -0
- package/dist/pages/PlanningPage.js +112 -0
- package/dist/pages/PlanningPage.js.map +1 -0
- package/dist/pages/RaiseDetail.d.ts +2 -0
- package/dist/pages/RaiseDetail.d.ts.map +1 -0
- package/dist/pages/RaiseDetail.js +198 -0
- package/dist/pages/RaiseDetail.js.map +1 -0
- package/dist/pages/RaiseStageSettingsPage.d.ts +3 -0
- package/dist/pages/RaiseStageSettingsPage.d.ts.map +1 -0
- package/dist/pages/RaiseStageSettingsPage.js +34 -0
- package/dist/pages/RaiseStageSettingsPage.js.map +1 -0
- package/dist/pages/RoleDetail.d.ts +2 -0
- package/dist/pages/RoleDetail.d.ts.map +1 -0
- package/dist/pages/RoleDetail.js +177 -0
- package/dist/pages/RoleDetail.js.map +1 -0
- package/dist/pages/SearchPage.d.ts +2 -0
- package/dist/pages/SearchPage.d.ts.map +1 -0
- package/dist/pages/SearchPage.js +51 -0
- package/dist/pages/SearchPage.js.map +1 -0
- package/dist/pages/account/AccountLayout.d.ts +2 -0
- package/dist/pages/account/AccountLayout.d.ts.map +1 -0
- package/dist/pages/account/AccountLayout.js +25 -0
- package/dist/pages/account/AccountLayout.js.map +1 -0
- package/dist/pages/account/Field.d.ts +8 -0
- package/dist/pages/account/Field.d.ts.map +1 -0
- package/dist/pages/account/Field.js +6 -0
- package/dist/pages/account/Field.js.map +1 -0
- package/dist/pages/account/PreferencesPage.d.ts +2 -0
- package/dist/pages/account/PreferencesPage.d.ts.map +1 -0
- package/dist/pages/account/PreferencesPage.js +92 -0
- package/dist/pages/account/PreferencesPage.js.map +1 -0
- package/dist/pages/account/ProfilePage.d.ts +14 -0
- package/dist/pages/account/ProfilePage.d.ts.map +1 -0
- package/dist/pages/account/ProfilePage.js +71 -0
- package/dist/pages/account/ProfilePage.js.map +1 -0
- package/dist/pages/account/SecurityPage.d.ts +11 -0
- package/dist/pages/account/SecurityPage.d.ts.map +1 -0
- package/dist/pages/account/SecurityPage.js +78 -0
- package/dist/pages/account/SecurityPage.js.map +1 -0
- package/dist/pages/admin/DataPage.d.ts +3 -0
- package/dist/pages/admin/DataPage.d.ts.map +1 -0
- package/dist/pages/admin/DataPage.js +210 -0
- package/dist/pages/admin/DataPage.js.map +1 -0
- package/dist/pages/admin/McpPage.d.ts +2 -0
- package/dist/pages/admin/McpPage.d.ts.map +1 -0
- package/dist/pages/admin/McpPage.js +128 -0
- package/dist/pages/admin/McpPage.js.map +1 -0
- package/dist/pages/admin/ModulesPage.d.ts +2 -0
- package/dist/pages/admin/ModulesPage.d.ts.map +1 -0
- package/dist/pages/admin/ModulesPage.js +53 -0
- package/dist/pages/admin/ModulesPage.js.map +1 -0
- package/dist/pages/admin/TeamPage.d.ts +2 -0
- package/dist/pages/admin/TeamPage.d.ts.map +1 -0
- package/dist/pages/admin/TeamPage.js +99 -0
- package/dist/pages/admin/TeamPage.js.map +1 -0
- package/dist/pages/admin/WebhookDeliveries.d.ts +4 -0
- package/dist/pages/admin/WebhookDeliveries.d.ts.map +1 -0
- package/dist/pages/admin/WebhookDeliveries.js +88 -0
- package/dist/pages/admin/WebhookDeliveries.js.map +1 -0
- package/dist/pages/admin/WebhooksPage.d.ts +2 -0
- package/dist/pages/admin/WebhooksPage.d.ts.map +1 -0
- package/dist/pages/admin/WebhooksPage.js +152 -0
- package/dist/pages/admin/WebhooksPage.js.map +1 -0
- package/dist/pages/admin/WorkspaceSettingsPage.d.ts +2 -0
- package/dist/pages/admin/WorkspaceSettingsPage.d.ts.map +1 -0
- package/dist/pages/admin/WorkspaceSettingsPage.js +117 -0
- package/dist/pages/admin/WorkspaceSettingsPage.js.map +1 -0
- package/dist/pages/auth/AuthForm.d.ts +46 -0
- package/dist/pages/auth/AuthForm.d.ts.map +1 -0
- package/dist/pages/auth/AuthForm.js +32 -0
- package/dist/pages/auth/AuthForm.js.map +1 -0
- package/dist/pages/auth/AuthLayout.d.ts +24 -0
- package/dist/pages/auth/AuthLayout.d.ts.map +1 -0
- package/dist/pages/auth/AuthLayout.js +19 -0
- package/dist/pages/auth/AuthLayout.js.map +1 -0
- package/dist/pages/auth/ForgotPasswordPage.d.ts +13 -0
- package/dist/pages/auth/ForgotPasswordPage.d.ts.map +1 -0
- package/dist/pages/auth/ForgotPasswordPage.js +39 -0
- package/dist/pages/auth/ForgotPasswordPage.js.map +1 -0
- package/dist/pages/auth/JoinPage.d.ts +12 -0
- package/dist/pages/auth/JoinPage.d.ts.map +1 -0
- package/dist/pages/auth/JoinPage.js +43 -0
- package/dist/pages/auth/JoinPage.js.map +1 -0
- package/dist/pages/auth/ResetPasswordPage.d.ts +13 -0
- package/dist/pages/auth/ResetPasswordPage.d.ts.map +1 -0
- package/dist/pages/auth/ResetPasswordPage.js +58 -0
- package/dist/pages/auth/ResetPasswordPage.js.map +1 -0
- package/dist/pages/auth/SignInPage.d.ts +2 -0
- package/dist/pages/auth/SignInPage.d.ts.map +1 -0
- package/dist/pages/auth/SignInPage.js +38 -0
- package/dist/pages/auth/SignInPage.js.map +1 -0
- package/dist/pages/auth/SignUpPage.d.ts +13 -0
- package/dist/pages/auth/SignUpPage.d.ts.map +1 -0
- package/dist/pages/auth/SignUpPage.js +43 -0
- package/dist/pages/auth/SignUpPage.js.map +1 -0
- package/dist/pages/candidateFields.d.ts +22 -0
- package/dist/pages/candidateFields.d.ts.map +1 -0
- package/dist/pages/candidateFields.js +82 -0
- package/dist/pages/candidateFields.js.map +1 -0
- package/dist/pages/dashboard/DashboardPage.d.ts +2 -0
- package/dist/pages/dashboard/DashboardPage.d.ts.map +1 -0
- package/dist/pages/dashboard/DashboardPage.js +40 -0
- package/dist/pages/dashboard/DashboardPage.js.map +1 -0
- package/dist/pages/dashboard/attention.d.ts +41 -0
- package/dist/pages/dashboard/attention.d.ts.map +1 -0
- package/dist/pages/dashboard/attention.js +146 -0
- package/dist/pages/dashboard/attention.js.map +1 -0
- package/dist/pages/dashboard/sections.d.ts +20 -0
- package/dist/pages/dashboard/sections.d.ts.map +1 -0
- package/dist/pages/dashboard/sections.js +60 -0
- package/dist/pages/dashboard/sections.js.map +1 -0
- package/dist/pages/fields.d.ts +11 -0
- package/dist/pages/fields.d.ts.map +1 -0
- package/dist/pages/fields.js +17 -0
- package/dist/pages/fields.js.map +1 -0
- package/dist/pages/forms/EmbedPanel.d.ts +14 -0
- package/dist/pages/forms/EmbedPanel.d.ts.map +1 -0
- package/dist/pages/forms/EmbedPanel.js +19 -0
- package/dist/pages/forms/EmbedPanel.js.map +1 -0
- package/dist/pages/forms/FieldsEditor.d.ts +6 -0
- package/dist/pages/forms/FieldsEditor.d.ts.map +1 -0
- package/dist/pages/forms/FieldsEditor.js +115 -0
- package/dist/pages/forms/FieldsEditor.js.map +1 -0
- package/dist/pages/forms/FormSettings.d.ts +6 -0
- package/dist/pages/forms/FormSettings.d.ts.map +1 -0
- package/dist/pages/forms/FormSettings.js +47 -0
- package/dist/pages/forms/FormSettings.js.map +1 -0
- package/dist/pages/forms/SubmissionsTable.d.ts +8 -0
- package/dist/pages/forms/SubmissionsTable.d.ts.map +1 -0
- package/dist/pages/forms/SubmissionsTable.js +91 -0
- package/dist/pages/forms/SubmissionsTable.js.map +1 -0
- package/dist/pages/forms/fieldList.d.ts +70 -0
- package/dist/pages/forms/fieldList.d.ts.map +1 -0
- package/dist/pages/forms/fieldList.js +126 -0
- package/dist/pages/forms/fieldList.js.map +1 -0
- package/dist/pages/forms/template.d.ts +18 -0
- package/dist/pages/forms/template.d.ts.map +1 -0
- package/dist/pages/forms/template.js +34 -0
- package/dist/pages/forms/template.js.map +1 -0
- package/dist/pages/handbook/HandbookPage.d.ts +2 -0
- package/dist/pages/handbook/HandbookPage.d.ts.map +1 -0
- package/dist/pages/handbook/HandbookPage.js +197 -0
- package/dist/pages/handbook/HandbookPage.js.map +1 -0
- package/dist/pages/handbook/tree.d.ts +62 -0
- package/dist/pages/handbook/tree.d.ts.map +1 -0
- package/dist/pages/handbook/tree.js +222 -0
- package/dist/pages/handbook/tree.js.map +1 -0
- package/dist/pages/hiringDirectory.d.ts +60 -0
- package/dist/pages/hiringDirectory.d.ts.map +1 -0
- package/dist/pages/hiringDirectory.js +81 -0
- package/dist/pages/hiringDirectory.js.map +1 -0
- package/dist/pages/onboarding/HandbookStepPage.d.ts +14 -0
- package/dist/pages/onboarding/HandbookStepPage.d.ts.map +1 -0
- package/dist/pages/onboarding/HandbookStepPage.js +29 -0
- package/dist/pages/onboarding/HandbookStepPage.js.map +1 -0
- package/dist/pages/onboarding/InvitesStepPage.d.ts +2 -0
- package/dist/pages/onboarding/InvitesStepPage.d.ts.map +1 -0
- package/dist/pages/onboarding/InvitesStepPage.js +77 -0
- package/dist/pages/onboarding/InvitesStepPage.js.map +1 -0
- package/dist/pages/onboarding/WorkspaceStepPage.d.ts +2 -0
- package/dist/pages/onboarding/WorkspaceStepPage.d.ts.map +1 -0
- package/dist/pages/onboarding/WorkspaceStepPage.js +72 -0
- package/dist/pages/onboarding/WorkspaceStepPage.js.map +1 -0
- package/dist/pages/positionDirectory.d.ts +20 -0
- package/dist/pages/positionDirectory.d.ts.map +1 -0
- package/dist/pages/positionDirectory.js +58 -0
- package/dist/pages/positionDirectory.js.map +1 -0
- package/dist/registry/UiExtensionProvider.d.ts +12 -0
- package/dist/registry/UiExtensionProvider.d.ts.map +1 -0
- package/dist/registry/UiExtensionProvider.js +10 -0
- package/dist/registry/UiExtensionProvider.js.map +1 -0
- package/dist/registry/context.d.ts +31 -0
- package/dist/registry/context.d.ts.map +1 -0
- package/dist/registry/context.js +45 -0
- package/dist/registry/context.js.map +1 -0
- package/dist/registry/contributions.d.ts +71 -0
- package/dist/registry/contributions.d.ts.map +1 -0
- package/dist/registry/contributions.js +25 -0
- package/dist/registry/contributions.js.map +1 -0
- package/dist/registry/overridable.d.ts +27 -0
- package/dist/registry/overridable.d.ts.map +1 -0
- package/dist/registry/overridable.js +29 -0
- package/dist/registry/overridable.js.map +1 -0
- package/dist/registry/registry.d.ts +68 -0
- package/dist/registry/registry.d.ts.map +1 -0
- package/dist/registry/registry.js +112 -0
- package/dist/registry/registry.js.map +1 -0
- package/dist/testing/inputs.d.ts +13 -0
- package/dist/testing/inputs.d.ts.map +1 -0
- package/dist/testing/inputs.js +16 -0
- package/dist/testing/inputs.js.map +1 -0
- package/dist/testing/stubClient.d.ts +42 -0
- package/dist/testing/stubClient.d.ts.map +1 -0
- package/dist/testing/stubClient.js +29 -0
- package/dist/testing/stubClient.js.map +1 -0
- package/package.json +73 -0
- package/src/ServiceStatus.tsx +61 -0
- package/src/api/ApiProvider.tsx +40 -0
- package/src/api/client.ts +267 -0
- package/src/api/context.ts +25 -0
- package/src/api/errors.ts +14 -0
- package/src/api/health.ts +38 -0
- package/src/api/json.ts +4 -0
- package/src/api/queryClient.ts +35 -0
- package/src/api/resource.ts +412 -0
- package/src/api/resources/account.ts +220 -0
- package/src/api/resources/activities.ts +31 -0
- package/src/api/resources/agentTasks.ts +172 -0
- package/src/api/resources/candidates.ts +69 -0
- package/src/api/resources/companies.ts +72 -0
- package/src/api/resources/dashboard.ts +39 -0
- package/src/api/resources/deals.ts +82 -0
- package/src/api/resources/decisions.ts +60 -0
- package/src/api/resources/forms.ts +218 -0
- package/src/api/resources/handbookPages.ts +77 -0
- package/src/api/resources/importJobs.ts +229 -0
- package/src/api/resources/invites.ts +112 -0
- package/src/api/resources/mcpTools.ts +28 -0
- package/src/api/resources/members.ts +105 -0
- package/src/api/resources/moduleSettings.ts +67 -0
- package/src/api/resources/mutation.ts +31 -0
- package/src/api/resources/notes.ts +62 -0
- package/src/api/resources/opportunities.ts +84 -0
- package/src/api/resources/partnerships.ts +89 -0
- package/src/api/resources/people.ts +72 -0
- package/src/api/resources/pipelineStages.ts +93 -0
- package/src/api/resources/planItems.ts +103 -0
- package/src/api/resources/positions.ts +70 -0
- package/src/api/resources/raises.ts +82 -0
- package/src/api/resources/roles.ts +65 -0
- package/src/api/resources/search.ts +49 -0
- package/src/api/resources/session.ts +220 -0
- package/src/api/resources/webhooks.ts +157 -0
- package/src/api/resources/workspace.ts +81 -0
- package/src/app/KelpieApp.tsx +162 -0
- package/src/app/SessionGate.tsx +42 -0
- package/src/components/ActivitiesPanel.tsx +235 -0
- package/src/components/AgentTasks.tsx +473 -0
- package/src/components/Chip.tsx +36 -0
- package/src/components/CopyButton.tsx +48 -0
- package/src/components/DataTable.tsx +209 -0
- package/src/components/DecisionsPanel.tsx +233 -0
- package/src/components/DeleteRecord.tsx +73 -0
- package/src/components/EntitySearch.tsx +268 -0
- package/src/components/ErrorBoundary.tsx +58 -0
- package/src/components/InlineEdit.tsx +179 -0
- package/src/components/KanbanBoard.tsx +234 -0
- package/src/components/MarkdownView.tsx +73 -0
- package/src/components/NotesPanel.tsx +169 -0
- package/src/components/PageHeader.tsx +61 -0
- package/src/components/PhonesField.tsx +204 -0
- package/src/components/PlanAttention.tsx +249 -0
- package/src/components/PlanPanel.tsx +317 -0
- package/src/components/QueryState.tsx +83 -0
- package/src/components/RecordTabs.tsx +69 -0
- package/src/components/SectionHeader.tsx +63 -0
- package/src/components/SegmentedControl.tsx +48 -0
- package/src/components/Shell.tsx +300 -0
- package/src/components/SidebarField.tsx +18 -0
- package/src/components/SocialProfilesField.tsx +356 -0
- package/src/components/StageSettings.tsx +319 -0
- package/src/components/SummaryBlock.tsx +27 -0
- package/src/index.ts +190 -0
- package/src/lib/dates.ts +90 -0
- package/src/lib/money.ts +12 -0
- package/src/lib/names.ts +13 -0
- package/src/lib/plan.ts +147 -0
- package/src/lib/theme.ts +53 -0
- package/src/pages/CompaniesPage.tsx +143 -0
- package/src/pages/CompanyDetail.tsx +502 -0
- package/src/pages/DealDetail.tsx +512 -0
- package/src/pages/DealStageSettingsPage.tsx +67 -0
- package/src/pages/DealsPage.tsx +342 -0
- package/src/pages/DecisionsPage.tsx +211 -0
- package/src/pages/FormDetail.tsx +130 -0
- package/src/pages/FormsPage.tsx +151 -0
- package/src/pages/FundraisingPage.tsx +354 -0
- package/src/pages/HiringPage.tsx +169 -0
- package/src/pages/NotFoundPage.tsx +27 -0
- package/src/pages/OpportunitiesPage.tsx +349 -0
- package/src/pages/OpportunityDetail.tsx +337 -0
- package/src/pages/OpportunityStageSettingsPage.tsx +63 -0
- package/src/pages/PartnershipDetail.tsx +490 -0
- package/src/pages/PartnershipStageSettingsPage.tsx +63 -0
- package/src/pages/PartnershipsPage.tsx +353 -0
- package/src/pages/PeoplePage.tsx +145 -0
- package/src/pages/PersonDetail.tsx +526 -0
- package/src/pages/PlanningPage.tsx +318 -0
- package/src/pages/RaiseDetail.tsx +498 -0
- package/src/pages/RaiseStageSettingsPage.tsx +63 -0
- package/src/pages/RoleDetail.tsx +455 -0
- package/src/pages/SearchPage.tsx +135 -0
- package/src/pages/account/AccountLayout.tsx +38 -0
- package/src/pages/account/Field.tsx +20 -0
- package/src/pages/account/PreferencesPage.tsx +224 -0
- package/src/pages/account/ProfilePage.tsx +147 -0
- package/src/pages/account/SecurityPage.tsx +237 -0
- package/src/pages/admin/DataPage.tsx +772 -0
- package/src/pages/admin/McpPage.tsx +404 -0
- package/src/pages/admin/ModulesPage.tsx +113 -0
- package/src/pages/admin/TeamPage.tsx +386 -0
- package/src/pages/admin/WebhookDeliveries.tsx +184 -0
- package/src/pages/admin/WebhooksPage.tsx +443 -0
- package/src/pages/admin/WorkspaceSettingsPage.tsx +274 -0
- package/src/pages/auth/AuthForm.tsx +118 -0
- package/src/pages/auth/AuthLayout.tsx +74 -0
- package/src/pages/auth/ForgotPasswordPage.tsx +80 -0
- package/src/pages/auth/JoinPage.tsx +85 -0
- package/src/pages/auth/ResetPasswordPage.tsx +124 -0
- package/src/pages/auth/SignInPage.tsx +83 -0
- package/src/pages/auth/SignUpPage.tsx +93 -0
- package/src/pages/candidateFields.tsx +175 -0
- package/src/pages/dashboard/DashboardPage.tsx +108 -0
- package/src/pages/dashboard/attention.ts +206 -0
- package/src/pages/dashboard/sections.tsx +269 -0
- package/src/pages/fields.ts +21 -0
- package/src/pages/forms/EmbedPanel.tsx +95 -0
- package/src/pages/forms/FieldsEditor.tsx +412 -0
- package/src/pages/forms/FormSettings.tsx +159 -0
- package/src/pages/forms/SubmissionsTable.tsx +171 -0
- package/src/pages/forms/fieldList.ts +209 -0
- package/src/pages/forms/template.ts +37 -0
- package/src/pages/handbook/HandbookPage.tsx +500 -0
- package/src/pages/handbook/tree.ts +327 -0
- package/src/pages/hiringDirectory.ts +146 -0
- package/src/pages/onboarding/HandbookStepPage.tsx +75 -0
- package/src/pages/onboarding/InvitesStepPage.tsx +180 -0
- package/src/pages/onboarding/WorkspaceStepPage.tsx +122 -0
- package/src/pages/positionDirectory.ts +98 -0
- package/src/registry/UiExtensionProvider.tsx +20 -0
- package/src/registry/context.ts +67 -0
- package/src/registry/contributions.ts +89 -0
- package/src/registry/overridable.ts +62 -0
- package/src/registry/registry.ts +204 -0
- package/src/styles.css +175 -0
- package/src/testing/inputs.ts +18 -0
- package/src/testing/stubClient.ts +78 -0
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
import { createPlanItemBody, planItemBody, planItemSchema } from '@kelpie/schemas'
|
|
2
|
+
import type {
|
|
3
|
+
CreatePlanItemInput,
|
|
4
|
+
PipelineKind,
|
|
5
|
+
PlanItem,
|
|
6
|
+
PlanItemInput,
|
|
7
|
+
PlanItemStatus,
|
|
8
|
+
} from '@kelpie/schemas'
|
|
9
|
+
|
|
10
|
+
import type { QueryParameters } from '../client.ts'
|
|
11
|
+
import { createResourceHooks } from '../resource.ts'
|
|
12
|
+
import type { ListOptions, MutationResult, RecordListResult, UpdateArguments } from '../resource.ts'
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* `/v1/plan_items`: the dated next steps on the four pipelines.
|
|
16
|
+
*
|
|
17
|
+
* Unlike notes, this list is answerable workspace-wide, because the Planning
|
|
18
|
+
* page is exactly that question. `useRecordPlanItems` narrows it to one record's
|
|
19
|
+
* panel and `usePlanItemsForRecords` to a page of them.
|
|
20
|
+
*
|
|
21
|
+
* No `alsoInvalidates`: a plan item write emits no activity and touches no other
|
|
22
|
+
* resource. The one cross-resource effect runs the other way, when deleting a
|
|
23
|
+
* pipeline record takes its plan items with it.
|
|
24
|
+
*/
|
|
25
|
+
|
|
26
|
+
const planItems = createResourceHooks<PlanItem, CreatePlanItemInput, PlanItemInput>({
|
|
27
|
+
name: 'planItems',
|
|
28
|
+
path: '/plan_items',
|
|
29
|
+
decode: planItemSchema.parse,
|
|
30
|
+
createBody: createPlanItemBody,
|
|
31
|
+
updateBody: planItemBody,
|
|
32
|
+
})
|
|
33
|
+
|
|
34
|
+
/** The `?limit=` ceiling from `api.md`. A caller asking for a bounded set may ask for all of it. */
|
|
35
|
+
export const MAX_PAGE_SIZE = 200
|
|
36
|
+
|
|
37
|
+
export interface PlanItemFilters {
|
|
38
|
+
readonly targetType?: PipelineKind
|
|
39
|
+
/** The records to read steps for. Repeats on the wire: `?target_id=a&target_id=b`. */
|
|
40
|
+
readonly targetIds?: readonly string[]
|
|
41
|
+
readonly statuses?: readonly PlanItemStatus[]
|
|
42
|
+
/** Inclusive `YYYY-MM-DD` bounds. The calendar asks for one month with the pair. */
|
|
43
|
+
readonly from?: string
|
|
44
|
+
readonly to?: string
|
|
45
|
+
/** Page size. Worth setting only when the filter already bounds the answer. */
|
|
46
|
+
readonly limit?: number
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
function planItemQuery(filters: PlanItemFilters): QueryParameters {
|
|
50
|
+
return {
|
|
51
|
+
target_type: filters.targetType,
|
|
52
|
+
target_id: filters.targetIds,
|
|
53
|
+
status: filters.statuses,
|
|
54
|
+
from: filters.from,
|
|
55
|
+
to: filters.to,
|
|
56
|
+
limit: filters.limit,
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
export function usePlanItems(
|
|
61
|
+
filters: PlanItemFilters = {},
|
|
62
|
+
options: ListOptions = {},
|
|
63
|
+
): RecordListResult<PlanItem> {
|
|
64
|
+
return planItems.useList(planItemQuery(filters), options)
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
/** One record's plan, in date order: what the panel on a detail page shows. */
|
|
68
|
+
export function useRecordPlanItems(
|
|
69
|
+
targetType: PipelineKind,
|
|
70
|
+
targetId: string,
|
|
71
|
+
): RecordListResult<PlanItem> {
|
|
72
|
+
return usePlanItems({ targetType, targetIds: [targetId] })
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
/**
|
|
76
|
+
* The plan across a set of records: a Person's or a Company's roll-up.
|
|
77
|
+
*
|
|
78
|
+
* Held back until the ids are known. A list filtered by a set of ids has nothing
|
|
79
|
+
* to ask before then, and asking with the filter omitted would answer with the
|
|
80
|
+
* whole workspace instead of nothing. Ids past the `?target_id=` ceiling are
|
|
81
|
+
* dropped rather than sent, because the request would be a 422 in full.
|
|
82
|
+
*/
|
|
83
|
+
export function usePlanItemsForRecords(
|
|
84
|
+
targetType: PipelineKind,
|
|
85
|
+
targetIds: readonly string[],
|
|
86
|
+
): RecordListResult<PlanItem> {
|
|
87
|
+
return usePlanItems(
|
|
88
|
+
{ targetType, targetIds: targetIds.slice(0, MAX_PAGE_SIZE), limit: MAX_PAGE_SIZE },
|
|
89
|
+
{ enabled: targetIds.length > 0 },
|
|
90
|
+
)
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
export function useCreatePlanItem(): MutationResult<CreatePlanItemInput, PlanItem> {
|
|
94
|
+
return planItems.useCreate()
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
export function useUpdatePlanItem(): MutationResult<UpdateArguments<PlanItemInput>, PlanItem> {
|
|
98
|
+
return planItems.useUpdate()
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
export function useDeletePlanItem(): MutationResult<string, void> {
|
|
102
|
+
return planItems.useRemove()
|
|
103
|
+
}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import { createPositionBody, positionSchema, updatePositionBody } from '@kelpie/schemas'
|
|
2
|
+
import type { CreatePositionInput, Position } from '@kelpie/schemas'
|
|
3
|
+
|
|
4
|
+
import type { QueryParameters } from '../client.ts'
|
|
5
|
+
import { createResourceHooks } from '../resource.ts'
|
|
6
|
+
import type {
|
|
7
|
+
ListOptions,
|
|
8
|
+
MutationResult,
|
|
9
|
+
RecordListResult,
|
|
10
|
+
UpdateArguments,
|
|
11
|
+
} from '../resource.ts'
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* `/v1/positions`, the Person↔Company link holding the job title.
|
|
15
|
+
*
|
|
16
|
+
* Only the title is updatable. Re-pointing a link at a different person or
|
|
17
|
+
* company is a delete and a create, which is what the API accepts.
|
|
18
|
+
*/
|
|
19
|
+
|
|
20
|
+
export interface PositionTitleUpdate {
|
|
21
|
+
readonly title: string
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
const positions = createResourceHooks<Position, CreatePositionInput, PositionTitleUpdate>({
|
|
25
|
+
name: 'positions',
|
|
26
|
+
path: '/positions',
|
|
27
|
+
decode: positionSchema.parse,
|
|
28
|
+
createBody: createPositionBody,
|
|
29
|
+
updateBody: (input) => updatePositionBody(input.title),
|
|
30
|
+
// `?company_id=` on people and `?person_id=` on companies are lists this join
|
|
31
|
+
// decides the membership of. Without this, linking a person to a company shows
|
|
32
|
+
// the new row with the name still unfetched.
|
|
33
|
+
// Creating one also emits a `linked` activity on both the person and the
|
|
34
|
+
// company, so both timelines are stale too.
|
|
35
|
+
alsoInvalidates: ['people', 'companies', 'activities'],
|
|
36
|
+
})
|
|
37
|
+
|
|
38
|
+
export interface PositionFilters {
|
|
39
|
+
/** Positions held by any of these people. Repeats on the wire. */
|
|
40
|
+
readonly personIds?: readonly string[]
|
|
41
|
+
/** Positions held at any of these companies. Repeats on the wire. */
|
|
42
|
+
readonly companyIds?: readonly string[]
|
|
43
|
+
readonly limit?: number
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
function positionQuery(filters: PositionFilters): QueryParameters {
|
|
47
|
+
return { person_id: filters.personIds, company_id: filters.companyIds, limit: filters.limit }
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
export function usePositions(
|
|
51
|
+
filters: PositionFilters = {},
|
|
52
|
+
options: ListOptions = {},
|
|
53
|
+
): RecordListResult<Position> {
|
|
54
|
+
return positions.useList(positionQuery(filters), options)
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
export function useCreatePosition(): MutationResult<CreatePositionInput, Position> {
|
|
58
|
+
return positions.useCreate()
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
export function useUpdatePositionTitle(): MutationResult<
|
|
62
|
+
UpdateArguments<PositionTitleUpdate>,
|
|
63
|
+
Position
|
|
64
|
+
> {
|
|
65
|
+
return positions.useUpdate()
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
export function useDeletePosition(): MutationResult<string, void> {
|
|
69
|
+
return positions.useRemove()
|
|
70
|
+
}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import { raiseBody, raiseSchema } from '@kelpie/schemas'
|
|
2
|
+
import type { Raise, RaiseInput } from '@kelpie/schemas'
|
|
3
|
+
|
|
4
|
+
import type { QueryParameters } from '../client.ts'
|
|
5
|
+
import { createResourceHooks } from '../resource.ts'
|
|
6
|
+
import type {
|
|
7
|
+
ListOptions,
|
|
8
|
+
MutationResult,
|
|
9
|
+
RecordListResult,
|
|
10
|
+
RecordResult,
|
|
11
|
+
UpdateArguments,
|
|
12
|
+
} from '../resource.ts'
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* `/v1/raises`. Create needs a name and a firm; the API lands the raise in the
|
|
16
|
+
* pipeline's first open stage and hands it to the caller as owner.
|
|
17
|
+
*/
|
|
18
|
+
|
|
19
|
+
export interface CreateRaiseInput extends RaiseInput {
|
|
20
|
+
readonly name: string
|
|
21
|
+
readonly companyId: string
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
const raises = createResourceHooks<Raise, CreateRaiseInput, RaiseInput>({
|
|
25
|
+
name: 'raises',
|
|
26
|
+
path: '/raises',
|
|
27
|
+
decode: raiseSchema.parse,
|
|
28
|
+
createBody: raiseBody,
|
|
29
|
+
updateBody: raiseBody,
|
|
30
|
+
// Every write here emits an activity server-side, in the same transaction, so
|
|
31
|
+
// a timeline rendered on this record is stale the moment the write lands.
|
|
32
|
+
alsoInvalidates: ['activities'],
|
|
33
|
+
})
|
|
34
|
+
|
|
35
|
+
/** The documented filters on `GET /v1/raises`. */
|
|
36
|
+
export interface RaiseFilters {
|
|
37
|
+
/** Matches the raise's name, summary, tags, and its firm's name. */
|
|
38
|
+
readonly term?: string
|
|
39
|
+
/** Raises with any of these firms. Repeats on the wire. */
|
|
40
|
+
readonly companyIds?: readonly string[]
|
|
41
|
+
/** Raises sitting in any of these stages. Repeats on the wire. */
|
|
42
|
+
readonly stageIds?: readonly string[]
|
|
43
|
+
/** Raises any of these people are key on. Repeats on the wire. */
|
|
44
|
+
readonly personIds?: readonly string[]
|
|
45
|
+
readonly limit?: number
|
|
46
|
+
/** `field` ascending, `-field` descending. Only `name`, `created_at`, `updated_at` are sortable. */
|
|
47
|
+
readonly sort?: string
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
function raiseQuery(filters: RaiseFilters): QueryParameters {
|
|
51
|
+
return {
|
|
52
|
+
q: filters.term,
|
|
53
|
+
company_id: filters.companyIds,
|
|
54
|
+
stage_id: filters.stageIds,
|
|
55
|
+
person_id: filters.personIds,
|
|
56
|
+
limit: filters.limit,
|
|
57
|
+
sort: filters.sort,
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
export function useRaises(
|
|
62
|
+
filters: RaiseFilters = {},
|
|
63
|
+
options: ListOptions = {},
|
|
64
|
+
): RecordListResult<Raise> {
|
|
65
|
+
return raises.useList(raiseQuery(filters), options)
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
export function useRaise(id: string | undefined): RecordResult<Raise> {
|
|
69
|
+
return raises.useRecord(id)
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
export function useCreateRaise(): MutationResult<CreateRaiseInput, Raise> {
|
|
73
|
+
return raises.useCreate()
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
export function useUpdateRaise(): MutationResult<UpdateArguments<RaiseInput>, Raise> {
|
|
77
|
+
return raises.useUpdate()
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
export function useDeleteRaise(): MutationResult<string, void> {
|
|
81
|
+
return raises.useRemove()
|
|
82
|
+
}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { roleBody, roleSchema } from '@kelpie/schemas'
|
|
2
|
+
import type { Role, RoleInput, RoleStatus } from '@kelpie/schemas'
|
|
3
|
+
|
|
4
|
+
import type { QueryParameters } from '../client.ts'
|
|
5
|
+
import { createResourceHooks } from '../resource.ts'
|
|
6
|
+
import type {
|
|
7
|
+
ListOptions,
|
|
8
|
+
MutationResult,
|
|
9
|
+
RecordListResult,
|
|
10
|
+
RecordResult,
|
|
11
|
+
UpdateArguments,
|
|
12
|
+
} from '../resource.ts'
|
|
13
|
+
|
|
14
|
+
/** `/v1/roles`. Create needs a title; the API opens the role. */
|
|
15
|
+
|
|
16
|
+
export interface CreateRoleInput extends RoleInput {
|
|
17
|
+
readonly title: string
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
const roles = createResourceHooks<Role, CreateRoleInput, RoleInput>({
|
|
21
|
+
name: 'roles',
|
|
22
|
+
path: '/roles',
|
|
23
|
+
decode: roleSchema.parse,
|
|
24
|
+
createBody: roleBody,
|
|
25
|
+
updateBody: roleBody,
|
|
26
|
+
// Deleting a role takes its candidacies with it, and each one files an unlink
|
|
27
|
+
// on a person's timeline, so both caches are stale the moment a role goes.
|
|
28
|
+
alsoInvalidates: ['candidates', 'activities'],
|
|
29
|
+
})
|
|
30
|
+
|
|
31
|
+
/** The documented filters on `GET /v1/roles`. */
|
|
32
|
+
export interface RoleFilters {
|
|
33
|
+
/** Matches the role's title, which is what the mockup's filter box matches. */
|
|
34
|
+
readonly term?: string
|
|
35
|
+
/** Roles in any of these statuses. Repeats on the wire. */
|
|
36
|
+
readonly statuses?: readonly RoleStatus[]
|
|
37
|
+
readonly limit?: number
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
function roleQuery(filters: RoleFilters): QueryParameters {
|
|
41
|
+
return { q: filters.term, status: filters.statuses, limit: filters.limit }
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
export function useRoles(
|
|
45
|
+
filters: RoleFilters = {},
|
|
46
|
+
options: ListOptions = {},
|
|
47
|
+
): RecordListResult<Role> {
|
|
48
|
+
return roles.useList(roleQuery(filters), options)
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
export function useRole(id: string | undefined): RecordResult<Role> {
|
|
52
|
+
return roles.useRecord(id)
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
export function useCreateRole(): MutationResult<CreateRoleInput, Role> {
|
|
56
|
+
return roles.useCreate()
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
export function useUpdateRole(): MutationResult<UpdateArguments<RoleInput>, Role> {
|
|
60
|
+
return roles.useUpdate()
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
export function useDeleteRole(): MutationResult<string, void> {
|
|
64
|
+
return roles.useRemove()
|
|
65
|
+
}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { searchResultsSchema } from '@kelpie/schemas'
|
|
2
|
+
import type { SearchResults } from '@kelpie/schemas'
|
|
3
|
+
import { useQuery } from '@tanstack/react-query'
|
|
4
|
+
|
|
5
|
+
import { useApiClient } from '../context.ts'
|
|
6
|
+
import { toError } from '../errors.ts'
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* `/v1/search`, read-only: nine collections in one request.
|
|
10
|
+
*
|
|
11
|
+
* Not a `createResourceHooks` resource, for the same reason the dashboard is not.
|
|
12
|
+
* There is no collection to page, no id in a path, and no write.
|
|
13
|
+
*
|
|
14
|
+
* Nothing invalidates this key. Results are derived from records other pages own,
|
|
15
|
+
* so listing the writes that could change one would mean naming most of the API.
|
|
16
|
+
* A search is re-run by typing, which is a new key.
|
|
17
|
+
*/
|
|
18
|
+
|
|
19
|
+
/** How many results each group carries. The total beside each group stays exact. */
|
|
20
|
+
const GROUP_LIMIT = 10
|
|
21
|
+
|
|
22
|
+
export interface SearchState {
|
|
23
|
+
readonly results: SearchResults | undefined
|
|
24
|
+
readonly isLoading: boolean
|
|
25
|
+
readonly error: Error | null
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* @param term What was typed. An empty one asks nothing: the query is disabled
|
|
30
|
+
* rather than sent, because `?q=` is required and a blank one is a 422.
|
|
31
|
+
*/
|
|
32
|
+
export function useSearch(term: string): SearchState {
|
|
33
|
+
const client = useApiClient()
|
|
34
|
+
const trimmed = term.trim()
|
|
35
|
+
const enabled = trimmed.length > 0
|
|
36
|
+
|
|
37
|
+
const result = useQuery({
|
|
38
|
+
queryKey: ['search', trimmed],
|
|
39
|
+
queryFn: () => client.get('/search', searchResultsSchema.parse, { q: trimmed, limit: GROUP_LIMIT }),
|
|
40
|
+
enabled,
|
|
41
|
+
})
|
|
42
|
+
|
|
43
|
+
return {
|
|
44
|
+
results: result.data,
|
|
45
|
+
// A disabled query stays pending forever, which is not the same as loading.
|
|
46
|
+
isLoading: result.isPending && enabled,
|
|
47
|
+
error: toError(result.error),
|
|
48
|
+
}
|
|
49
|
+
}
|
|
@@ -0,0 +1,220 @@
|
|
|
1
|
+
import {
|
|
2
|
+
confirmPasswordResetBody,
|
|
3
|
+
createWorkspaceBody,
|
|
4
|
+
logInBody,
|
|
5
|
+
requestPasswordResetBody,
|
|
6
|
+
sessionSchema,
|
|
7
|
+
signUpBody,
|
|
8
|
+
signedInAccountSchema,
|
|
9
|
+
workspaceSchema,
|
|
10
|
+
} from '@kelpie/schemas'
|
|
11
|
+
import type {
|
|
12
|
+
ConfirmPasswordResetInput,
|
|
13
|
+
CreateWorkspaceInput,
|
|
14
|
+
LogInInput,
|
|
15
|
+
RequestPasswordResetInput,
|
|
16
|
+
Session,
|
|
17
|
+
SignUpInput,
|
|
18
|
+
SignedInAccount,
|
|
19
|
+
Workspace,
|
|
20
|
+
} from '@kelpie/schemas'
|
|
21
|
+
import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query'
|
|
22
|
+
|
|
23
|
+
import { ApiError } from '../client.ts'
|
|
24
|
+
import type { ApiClient } from '../client.ts'
|
|
25
|
+
import { useApiClient } from '../context.ts'
|
|
26
|
+
import { toError } from '../errors.ts'
|
|
27
|
+
import type { MutationResult } from '../resource.ts'
|
|
28
|
+
import { asMutationResult } from './mutation.ts'
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* Who the browser is signed in as.
|
|
32
|
+
*
|
|
33
|
+
* Not a CRM resource, so it does not go through `createResourceHooks`: there is
|
|
34
|
+
* no list, no id, and a `401` is an answer rather than a failure.
|
|
35
|
+
*
|
|
36
|
+
* Signing in or out changes which workspace every other cached query belongs to,
|
|
37
|
+
* so both clear the whole cache. Leaving one person's People page in the cache
|
|
38
|
+
* for the next person to sign in would be a data leak, not a stale render.
|
|
39
|
+
*/
|
|
40
|
+
|
|
41
|
+
const SESSION_KEY = ['session'] as const
|
|
42
|
+
|
|
43
|
+
function sessionQuery(client: ApiClient): {
|
|
44
|
+
queryKey: typeof SESSION_KEY
|
|
45
|
+
queryFn: () => Promise<Session>
|
|
46
|
+
retry: false
|
|
47
|
+
staleTime: 0
|
|
48
|
+
} {
|
|
49
|
+
return {
|
|
50
|
+
queryKey: SESSION_KEY,
|
|
51
|
+
queryFn: () => client.get('/auth/me', sessionSchema.parse),
|
|
52
|
+
// A 401 is the answer "signed out". Retrying it is pointless, and every
|
|
53
|
+
// remount should ask again rather than trust a cached identity.
|
|
54
|
+
retry: false,
|
|
55
|
+
staleTime: 0,
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
export interface SessionState {
|
|
60
|
+
readonly session: Session | undefined
|
|
61
|
+
readonly isLoading: boolean
|
|
62
|
+
/** The service answered `401`. Distinct from a network failure, which is `error`. */
|
|
63
|
+
readonly isSignedOut: boolean
|
|
64
|
+
/** Signed in, but the account has no workspace yet. Every CRM endpoint answers `403` until it does. */
|
|
65
|
+
readonly needsWorkspace: boolean
|
|
66
|
+
readonly error: Error | null
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
export function useSession(): SessionState {
|
|
70
|
+
const client = useApiClient()
|
|
71
|
+
const result = useQuery(sessionQuery(client))
|
|
72
|
+
const isSignedOut = result.error instanceof ApiError && result.error.status === 401
|
|
73
|
+
|
|
74
|
+
return {
|
|
75
|
+
session: result.data,
|
|
76
|
+
isLoading: result.isPending,
|
|
77
|
+
isSignedOut,
|
|
78
|
+
needsWorkspace: result.data !== undefined && result.data.workspaceId === null,
|
|
79
|
+
error: isSignedOut ? null : toError(result.error),
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
export function useLogIn(): MutationResult<LogInInput, SignedInAccount> {
|
|
84
|
+
const client = useApiClient()
|
|
85
|
+
const queryClient = useQueryClient()
|
|
86
|
+
const mutation = useMutation({
|
|
87
|
+
mutationFn: (input: LogInInput) =>
|
|
88
|
+
client.post('/auth/login', logInBody(input), signedInAccountSchema.parse),
|
|
89
|
+
onSuccess: async () => {
|
|
90
|
+
queryClient.clear()
|
|
91
|
+
await queryClient.fetchQuery(sessionQuery(client))
|
|
92
|
+
},
|
|
93
|
+
})
|
|
94
|
+
|
|
95
|
+
return asMutationResult(mutation)
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
/**
|
|
99
|
+
* Creates the account and signs the browser in, because `POST /v1/auth/signup`
|
|
100
|
+
* sets the session cookie itself.
|
|
101
|
+
*
|
|
102
|
+
* The cache is cleared for the same reason sign-in clears it: whatever is in it
|
|
103
|
+
* belongs to whoever was here before.
|
|
104
|
+
*/
|
|
105
|
+
export function useSignUp(): MutationResult<SignUpInput, SignedInAccount> {
|
|
106
|
+
const client = useApiClient()
|
|
107
|
+
const queryClient = useQueryClient()
|
|
108
|
+
const mutation = useMutation({
|
|
109
|
+
mutationFn: (input: SignUpInput) =>
|
|
110
|
+
client.post('/auth/signup', signUpBody(input), signedInAccountSchema.parse),
|
|
111
|
+
onSuccess: async () => {
|
|
112
|
+
queryClient.clear()
|
|
113
|
+
await queryClient.fetchQuery(sessionQuery(client))
|
|
114
|
+
},
|
|
115
|
+
})
|
|
116
|
+
|
|
117
|
+
return asMutationResult(mutation)
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
export function useLogOut(): MutationResult<void, void> {
|
|
121
|
+
const client = useApiClient()
|
|
122
|
+
const queryClient = useQueryClient()
|
|
123
|
+
const mutation = useMutation({
|
|
124
|
+
mutationFn: () => client.postEmpty('/auth/logout'),
|
|
125
|
+
// No refetch afterwards. The caller sends the browser to the sign-in page,
|
|
126
|
+
// and the next protected route asks for the session itself.
|
|
127
|
+
onSettled: () => {
|
|
128
|
+
queryClient.clear()
|
|
129
|
+
},
|
|
130
|
+
})
|
|
131
|
+
|
|
132
|
+
return asMutationResult(mutation)
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
/** Where a reset email lands. `ResetPasswordPage` reads the token out of the query string. */
|
|
136
|
+
export function resetUrlTemplate(origin: string): string {
|
|
137
|
+
return `${origin}/reset-password?token={token}`
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
/**
|
|
141
|
+
* Asks for a reset link.
|
|
142
|
+
*
|
|
143
|
+
* Answers `202` whether or not the address is registered, and the page says the
|
|
144
|
+
* same thing either way. A caller that could tell the difference would have an
|
|
145
|
+
* account-existence oracle.
|
|
146
|
+
*
|
|
147
|
+
* Nothing in the cache changes: this signs nobody in and ends no session.
|
|
148
|
+
*/
|
|
149
|
+
export function useRequestPasswordReset(): MutationResult<RequestPasswordResetInput, void> {
|
|
150
|
+
const client = useApiClient()
|
|
151
|
+
const mutation = useMutation({
|
|
152
|
+
mutationFn: (input: RequestPasswordResetInput) =>
|
|
153
|
+
client.postEmpty('/auth/password-reset', requestPasswordResetBody(input)),
|
|
154
|
+
})
|
|
155
|
+
|
|
156
|
+
return asMutationResult(mutation)
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
/**
|
|
160
|
+
* Spends a reset token on a new password.
|
|
161
|
+
*
|
|
162
|
+
* The service ends every session the account had, this browser included, so the
|
|
163
|
+
* caller sends the reader to sign in rather than into the app.
|
|
164
|
+
*/
|
|
165
|
+
export function useConfirmPasswordReset(): MutationResult<ConfirmPasswordResetInput, void> {
|
|
166
|
+
const client = useApiClient()
|
|
167
|
+
const queryClient = useQueryClient()
|
|
168
|
+
const mutation = useMutation({
|
|
169
|
+
mutationFn: (input: ConfirmPasswordResetInput) =>
|
|
170
|
+
client.postEmpty('/auth/password-reset/confirm', confirmPasswordResetBody(input)),
|
|
171
|
+
onSuccess: () => {
|
|
172
|
+
queryClient.clear()
|
|
173
|
+
},
|
|
174
|
+
})
|
|
175
|
+
|
|
176
|
+
return asMutationResult(mutation)
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
/**
|
|
180
|
+
* Joins the workspace an invitation names.
|
|
181
|
+
*
|
|
182
|
+
* Like creating one, this moves the session, so the whole cache goes: the next
|
|
183
|
+
* page belongs to a different workspace than the one just cached.
|
|
184
|
+
*/
|
|
185
|
+
export function useAcceptInvite(): MutationResult<{ readonly token: string }, Workspace> {
|
|
186
|
+
const client = useApiClient()
|
|
187
|
+
const queryClient = useQueryClient()
|
|
188
|
+
const mutation = useMutation({
|
|
189
|
+
mutationFn: ({ token }: { readonly token: string }) =>
|
|
190
|
+
client.post('/invites/accept', { token }, workspaceSchema.parse),
|
|
191
|
+
onSuccess: async () => {
|
|
192
|
+
queryClient.clear()
|
|
193
|
+
await queryClient.fetchQuery(sessionQuery(client))
|
|
194
|
+
},
|
|
195
|
+
})
|
|
196
|
+
|
|
197
|
+
return asMutationResult(mutation)
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
/**
|
|
201
|
+
* Creates the account's first workspace.
|
|
202
|
+
*
|
|
203
|
+
* Signup makes an account and nothing else (`onboarding.md`), so without this a
|
|
204
|
+
* new account reaches the app and gets `403` from every CRM endpoint.
|
|
205
|
+
*/
|
|
206
|
+
export function useCreateWorkspace(): MutationResult<CreateWorkspaceInput, Workspace> {
|
|
207
|
+
const client = useApiClient()
|
|
208
|
+
const queryClient = useQueryClient()
|
|
209
|
+
const mutation = useMutation({
|
|
210
|
+
mutationFn: (input: CreateWorkspaceInput) =>
|
|
211
|
+
client.post('/workspaces', createWorkspaceBody(input), workspaceSchema.parse),
|
|
212
|
+
// Creating a workspace moves the session into it, so the session is stale.
|
|
213
|
+
onSuccess: async () => {
|
|
214
|
+
await queryClient.fetchQuery(sessionQuery(client))
|
|
215
|
+
},
|
|
216
|
+
})
|
|
217
|
+
|
|
218
|
+
return asMutationResult(mutation)
|
|
219
|
+
}
|
|
220
|
+
|