@burdenoff/microfe-planmagnet 2026.928.5 → 2026.928.7
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/generated/wspace-operations.d.ts +5 -0
- package/dist/generated/wspace-operations.d.ts.map +1 -1
- package/dist/generated/wspace-types.d.ts +15 -0
- package/dist/generated/wspace-types.d.ts.map +1 -1
- package/dist/planmagnet/PlanMagnetRoot.d.ts.map +1 -1
- package/dist/planmagnet/PlanMagnetRoot.js +20 -11
- package/dist/planmagnet/PlanMagnetRoot.js.map +1 -1
- package/dist/planmagnet/PlanMagnetRoutes.d.ts.map +1 -1
- package/dist/planmagnet/PlanMagnetRoutes.js +216 -196
- package/dist/planmagnet/PlanMagnetRoutes.js.map +1 -1
- package/dist/planmagnet/controls/Pickers.d.ts +14 -0
- package/dist/planmagnet/controls/Pickers.d.ts.map +1 -1
- package/dist/planmagnet/controls/Pickers.js +97 -22
- package/dist/planmagnet/controls/Pickers.js.map +1 -1
- package/dist/planmagnet/controls/WorkItemControls.d.ts +6 -2
- package/dist/planmagnet/controls/WorkItemControls.d.ts.map +1 -1
- package/dist/planmagnet/controls/WorkItemControls.js +8 -8
- package/dist/planmagnet/controls/WorkItemControls.js.map +1 -1
- package/dist/planmagnet/pages/DashboardDashboardPagePage.d.ts.map +1 -1
- package/dist/planmagnet/pages/DashboardDashboardPagePage.js +11 -3
- package/dist/planmagnet/pages/DashboardDashboardPagePage.js.map +1 -1
- package/dist/planmagnet/pages/PortfoliosPortfolioDetailPagePage.d.ts.map +1 -1
- package/dist/planmagnet/pages/PortfoliosPortfolioDetailPagePage.js +74 -59
- package/dist/planmagnet/pages/PortfoliosPortfolioDetailPagePage.js.map +1 -1
- package/dist/planmagnet/pages/ProjectsEditProjectPagePage.d.ts.map +1 -1
- package/dist/planmagnet/pages/ProjectsEditProjectPagePage.js +138 -112
- package/dist/planmagnet/pages/ProjectsEditProjectPagePage.js.map +1 -1
- package/dist/planmagnet/pages/ProjectsPlanningDetailPagePage.d.ts.map +1 -1
- package/dist/planmagnet/pages/ProjectsPlanningDetailPagePage.js +16 -6
- package/dist/planmagnet/pages/ProjectsPlanningDetailPagePage.js.map +1 -1
- package/dist/planmagnet/pages/ProjectsPlanningEditPagePage.d.ts.map +1 -1
- package/dist/planmagnet/pages/ProjectsPlanningEditPagePage.js +7 -2
- package/dist/planmagnet/pages/ProjectsPlanningEditPagePage.js.map +1 -1
- package/dist/planmagnet/pages/ProjectsPlanningPagePage.d.ts.map +1 -1
- package/dist/planmagnet/pages/ProjectsPlanningPagePage.js +76 -56
- package/dist/planmagnet/pages/ProjectsPlanningPagePage.js.map +1 -1
- package/dist/planmagnet/pages/ProjectsProjectDetailPagePage.d.ts.map +1 -1
- package/dist/planmagnet/pages/ProjectsProjectDetailPagePage.js +241 -188
- package/dist/planmagnet/pages/ProjectsProjectDetailPagePage.js.map +1 -1
- package/dist/planmagnet/pages/SprintsStartSprintPagePage.d.ts.map +1 -1
- package/dist/planmagnet/pages/SprintsStartSprintPagePage.js +168 -122
- package/dist/planmagnet/pages/SprintsStartSprintPagePage.js.map +1 -1
- package/dist/planmagnet/pages/TeamCreateTeamPagePage.d.ts.map +1 -1
- package/dist/planmagnet/pages/TeamCreateTeamPagePage.js +288 -91
- package/dist/planmagnet/pages/TeamCreateTeamPagePage.js.map +1 -1
- package/dist/planmagnet/pages/TeamTeamDetailPagePage.d.ts +2 -0
- package/dist/planmagnet/pages/TeamTeamDetailPagePage.d.ts.map +1 -0
- package/dist/planmagnet/pages/TeamTeamDetailPagePage.js +217 -0
- package/dist/planmagnet/pages/TeamTeamDetailPagePage.js.map +1 -0
- package/dist/planmagnet/pages/TeamTeamEditPagePage.d.ts +2 -0
- package/dist/planmagnet/pages/TeamTeamEditPagePage.d.ts.map +1 -0
- package/dist/planmagnet/pages/TeamTeamEditPagePage.js +211 -0
- package/dist/planmagnet/pages/TeamTeamEditPagePage.js.map +1 -0
- package/dist/planmagnet/pages/TeamTeamsListPagePage.d.ts +2 -0
- package/dist/planmagnet/pages/TeamTeamsListPagePage.d.ts.map +1 -0
- package/dist/planmagnet/pages/TeamTeamsListPagePage.js +118 -0
- package/dist/planmagnet/pages/TeamTeamsListPagePage.js.map +1 -0
- package/dist/planmagnet/sprints/SprintControls.d.ts +15 -3
- package/dist/planmagnet/sprints/SprintControls.d.ts.map +1 -1
- package/dist/planmagnet/sprints/SprintControls.js +293 -190
- package/dist/planmagnet/sprints/SprintControls.js.map +1 -1
- package/dist/planmagnet/team/TeamControls.d.ts +31 -0
- package/dist/planmagnet/team/TeamControls.d.ts.map +1 -0
- package/dist/planmagnet/team/TeamControls.js +407 -0
- package/dist/planmagnet/team/TeamControls.js.map +1 -0
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PlanMagnetRoutes.js","names":[],"sources":["../../src/planmagnet/PlanMagnetRoutes.tsx"],"sourcesContent":["import { lazy, Suspense } from 'react';\nimport { Route, Routes } from 'react-router';\nimport { Loader2 } from 'lucide-react';\nimport { AnalyticsAnalyticsPagePage } from './pages/AnalyticsAnalyticsPagePage';\n\nconst PlanMagnetNotFoundPage = lazy(() =>\n import('./pages/NotFoundPage').then((m) => ({ default: m.PlanMagnetNotFoundPage }))\n);\nconst DocsDocsPagePage = lazy(() =>\n import('./pages/DocsDocsPagePage').then((m) => ({ default: m.DocsDocsPagePage }))\n);\nconst DocsDocDetailPagePage = lazy(() =>\n import('./pages/DocsDocDetailPagePage').then((m) => ({ default: m.DocsDocDetailPagePage }))\n);\nconst DashboardDashboardPagePage = lazy(() =>\n import('./pages/DashboardDashboardPagePage').then((m) => ({\n default: m.DashboardDashboardPagePage,\n }))\n);\nconst ProductsCreateProductPagePage = lazy(() =>\n import('./pages/ProductsCreateProductPagePage').then((m) => ({\n default: m.ProductsCreateProductPagePage,\n }))\n);\nconst ProductsCreateRoadmapPagePage = lazy(() =>\n import('./pages/ProductsCreateRoadmapPagePage').then((m) => ({\n default: m.ProductsCreateRoadmapPagePage,\n }))\n);\nconst ProductsEditProductPagePage = lazy(() =>\n import('./pages/ProductsEditProductPagePage').then((m) => ({\n default: m.ProductsEditProductPagePage,\n }))\n);\nconst ProductsEditReleasePagePage = lazy(() =>\n import('./pages/ProductsEditReleasePagePage').then((m) => ({\n default: m.ProductsEditReleasePagePage,\n }))\n);\nconst ProductsFeatureAnalyticsPagePage = lazy(() =>\n import('./pages/ProductsFeatureAnalyticsPagePage').then((m) => ({\n default: m.ProductsFeatureAnalyticsPagePage,\n }))\n);\nconst ProductsFeatureDetailPagePage = lazy(() =>\n import('./pages/ProductsFeatureDetailPagePage').then((m) => ({\n default: m.ProductsFeatureDetailPagePage,\n }))\n);\nconst ProductsFeaturesPagePage = lazy(() =>\n import('./pages/ProductsFeaturesPagePage').then((m) => ({ default: m.ProductsFeaturesPagePage }))\n);\nconst ProductsNewFeaturePagePage = lazy(() =>\n import('./pages/ProductsNewFeaturePagePage').then((m) => ({\n default: m.ProductsNewFeaturePagePage,\n }))\n);\nconst ProductsProductDetailPagePage = lazy(() =>\n import('./pages/ProductsProductDetailPagePage').then((m) => ({\n default: m.ProductsProductDetailPagePage,\n }))\n);\nconst ProductsProductsPagePage = lazy(() =>\n import('./pages/ProductsProductsPagePage').then((m) => ({ default: m.ProductsProductsPagePage }))\n);\nconst ProductsReleaseDetailPagePage = lazy(() =>\n import('./pages/ProductsReleaseDetailPagePage').then((m) => ({\n default: m.ProductsReleaseDetailPagePage,\n }))\n);\nconst ProductsReleasesPagePage = lazy(() =>\n import('./pages/ProductsReleasesPagePage').then((m) => ({ default: m.ProductsReleasesPagePage }))\n);\nconst ProductsRoadmapAnalyticsPagePage = lazy(() =>\n import('./pages/ProductsRoadmapAnalyticsPagePage').then((m) => ({\n default: m.ProductsRoadmapAnalyticsPagePage,\n }))\n);\nconst ProductsRoadmapDetailPagePage = lazy(() =>\n import('./pages/ProductsRoadmapDetailPagePage').then((m) => ({\n default: m.ProductsRoadmapDetailPagePage,\n }))\n);\nconst ProductsRoadmapsPagePage = lazy(() =>\n import('./pages/ProductsRoadmapsPagePage').then((m) => ({ default: m.ProductsRoadmapsPagePage }))\n);\nconst PortfoliosPortfoliosPagePage = lazy(() =>\n import('./pages/PortfoliosPortfoliosPagePage').then((m) => ({\n default: m.PortfoliosPortfoliosPagePage,\n }))\n);\nconst PortfoliosCreatePortfolioPagePage = lazy(() =>\n import('./pages/PortfoliosCreatePortfolioPagePage').then((m) => ({\n default: m.PortfoliosCreatePortfolioPagePage,\n }))\n);\nconst PortfoliosPortfolioDetailPagePage = lazy(() =>\n import('./pages/PortfoliosPortfolioDetailPagePage').then((m) => ({\n default: m.PortfoliosPortfolioDetailPagePage,\n }))\n);\nconst PortfoliosEditPortfolioPagePage = lazy(() =>\n import('./pages/PortfoliosEditPortfolioPagePage').then((m) => ({\n default: m.PortfoliosEditPortfolioPagePage,\n }))\n);\nconst ProgramsProgramsPagePage = lazy(() =>\n import('./pages/ProgramsProgramsPagePage').then((m) => ({ default: m.ProgramsProgramsPagePage }))\n);\nconst ProgramsCreateProgramPagePage = lazy(() =>\n import('./pages/ProgramsCreateProgramPagePage').then((m) => ({\n default: m.ProgramsCreateProgramPagePage,\n }))\n);\nconst ProgramsProgramDetailPagePage = lazy(() =>\n import('./pages/ProgramsProgramDetailPagePage').then((m) => ({\n default: m.ProgramsProgramDetailPagePage,\n }))\n);\nconst ProgramsEditProgramPagePage = lazy(() =>\n import('./pages/ProgramsEditProgramPagePage').then((m) => ({\n default: m.ProgramsEditProgramPagePage,\n }))\n);\nconst CompetitorsCompetitorsPagePage = lazy(() =>\n import('./pages/CompetitorsCompetitorsPagePage').then((m) => ({\n default: m.CompetitorsCompetitorsPagePage,\n }))\n);\nconst CompetitorsCreateCompetitorPagePage = lazy(() =>\n import('./pages/CompetitorsCreateCompetitorPagePage').then((m) => ({\n default: m.CompetitorsCreateCompetitorPagePage,\n }))\n);\nconst CompetitorsCompetitorDetailPagePage = lazy(() =>\n import('./pages/CompetitorsCompetitorDetailPagePage').then((m) => ({\n default: m.CompetitorsCompetitorDetailPagePage,\n }))\n);\nconst CompetitorsEditCompetitorPagePage = lazy(() =>\n import('./pages/CompetitorsEditCompetitorPagePage').then((m) => ({\n default: m.CompetitorsEditCompetitorPagePage,\n }))\n);\nconst ProjectsActiveProjectsPagePage = lazy(() =>\n import('./pages/ProjectsActiveProjectsPagePage').then((m) => ({\n default: m.ProjectsActiveProjectsPagePage,\n }))\n);\nconst ProjectsCreateProjectPagePage = lazy(() =>\n import('./pages/ProjectsCreateProjectPagePage').then((m) => ({\n default: m.ProjectsCreateProjectPagePage,\n }))\n);\nconst ProjectsEditProjectPagePage = lazy(() =>\n import('./pages/ProjectsEditProjectPagePage').then((m) => ({\n default: m.ProjectsEditProjectPagePage,\n }))\n);\nconst ProjectsMilestoneDetailPagePage = lazy(() =>\n import('./pages/ProjectsMilestoneDetailPagePage').then((m) => ({\n default: m.ProjectsMilestoneDetailPagePage,\n }))\n);\nconst ProjectsBudgetsPagePage = lazy(() =>\n import('./pages/ProjectsBudgetsPagePage').then((m) => ({ default: m.ProjectsBudgetsPagePage }))\n);\nconst ProjectsBudgetDetailPagePage = lazy(() =>\n import('./pages/ProjectsBudgetDetailPagePage').then((m) => ({\n default: m.ProjectsBudgetDetailPagePage,\n }))\n);\nconst TasksTimeEntriesPagePage = lazy(() =>\n import('./pages/TasksTimeEntriesPagePage').then((m) => ({\n default: m.TasksTimeEntriesPagePage,\n }))\n);\nconst TasksTimesheetsPagePage = lazy(() =>\n import('./pages/TasksTimesheetsPagePage').then((m) => ({\n default: m.TasksTimesheetsPagePage,\n }))\n);\nconst TasksTimesheetDetailPagePage = lazy(() =>\n import('./pages/TasksTimesheetDetailPagePage').then((m) => ({\n default: m.TasksTimesheetDetailPagePage,\n }))\n);\nconst GoalsGoalsPagePage = lazy(() =>\n import('./pages/GoalsGoalsPagePage').then((m) => ({ default: m.GoalsGoalsPagePage }))\n);\nconst GoalsCreateObjectivePagePage = lazy(() =>\n import('./pages/GoalsCreateObjectivePagePage').then((m) => ({\n default: m.GoalsCreateObjectivePagePage,\n }))\n);\nconst GoalsObjectiveDetailPagePage = lazy(() =>\n import('./pages/GoalsObjectiveDetailPagePage').then((m) => ({\n default: m.GoalsObjectiveDetailPagePage,\n }))\n);\nconst ProjectsMilestonesPagePage = lazy(() =>\n import('./pages/ProjectsMilestonesPagePage').then((m) => ({\n default: m.ProjectsMilestonesPagePage,\n }))\n);\nconst ProjectsPlanningDetailPagePage = lazy(() =>\n import('./pages/ProjectsPlanningDetailPagePage').then((m) => ({\n default: m.ProjectsPlanningDetailPagePage,\n }))\n);\nconst ProjectsPlanningEditPagePage = lazy(() =>\n import('./pages/ProjectsPlanningEditPagePage').then((m) => ({\n default: m.ProjectsPlanningEditPagePage,\n }))\n);\nconst ProjectsPlanningPagePage = lazy(() =>\n import('./pages/ProjectsPlanningPagePage').then((m) => ({ default: m.ProjectsPlanningPagePage }))\n);\nconst ProjectsProjectDetailPagePage = lazy(() =>\n import('./pages/ProjectsProjectDetailPagePage').then((m) => ({\n default: m.ProjectsProjectDetailPagePage,\n }))\n);\nconst ProjectsProjectsPagePage = lazy(() =>\n import('./pages/ProjectsProjectsPagePage').then((m) => ({ default: m.ProjectsProjectsPagePage }))\n);\nconst ReportsCreateReportPagePage = lazy(() =>\n import('./pages/ReportsCreateReportPagePage').then((m) => ({\n default: m.ReportsCreateReportPagePage,\n }))\n);\nconst ReportsReportsPagePage = lazy(() =>\n import('./pages/ReportsReportsPagePage').then((m) => ({ default: m.ReportsReportsPagePage }))\n);\nconst SprintsStartSprintPagePage = lazy(() =>\n import('./pages/SprintsStartSprintPagePage').then((m) => ({\n default: m.SprintsStartSprintPagePage,\n }))\n);\nconst TasksCreateTaskPagePage = lazy(() =>\n import('./pages/TasksCreateTaskPagePage').then((m) => ({ default: m.TasksCreateTaskPagePage }))\n);\nconst TasksEditTaskPagePage = lazy(() =>\n import('./pages/TasksEditTaskPagePage').then((m) => ({ default: m.TasksEditTaskPagePage }))\n);\nconst ProjectsWorkflowPagePage = lazy(() =>\n import('./pages/ProjectsWorkflowPagePage').then((m) => ({ default: m.ProjectsWorkflowPagePage }))\n);\nconst ProjectsCustomFieldsPagePage = lazy(() =>\n import('./pages/ProjectsCustomFieldsPagePage').then((m) => ({\n default: m.ProjectsCustomFieldsPagePage,\n }))\n);\nconst TasksImportPagePage = lazy(() =>\n import('./pages/TasksImportPagePage').then((m) => ({ default: m.TasksImportPagePage }))\n);\nconst TasksTaskDetailPagePage = lazy(() =>\n import('./pages/TasksTaskDetailPagePage').then((m) => ({ default: m.TasksTaskDetailPagePage }))\n);\nconst TasksTasksPagePage = lazy(() =>\n import('./pages/TasksTasksPagePage').then((m) => ({ default: m.TasksTasksPagePage }))\n);\nconst TeamCreateTeamPagePage = lazy(() =>\n import('./pages/TeamCreateTeamPagePage').then((m) => ({ default: m.TeamCreateTeamPagePage }))\n);\nconst TeamInviteMemberPagePage = lazy(() =>\n import('./pages/TeamInviteMemberPagePage').then((m) => ({ default: m.TeamInviteMemberPagePage }))\n);\nconst TeamTeamPagePage = lazy(() =>\n import('./pages/TeamTeamPagePage').then((m) => ({ default: m.TeamTeamPagePage }))\n);\nconst WorkspaceCreateWorkspacePagePage = lazy(() =>\n import('./pages/WorkspaceCreateWorkspacePagePage').then((m) => ({\n default: m.WorkspaceCreateWorkspacePagePage,\n }))\n);\n// BOFF-8047: Automation rules and Project templates\nconst AutomationAutomationRulesPagePage = lazy(() =>\n import('./pages/AutomationAutomationRulesPagePage').then((m) => ({\n default: m.AutomationAutomationRulesPagePage,\n }))\n);\nconst AutomationCreateAutomationRulePagePage = lazy(() =>\n import('./pages/AutomationCreateAutomationRulePagePage').then((m) => ({\n default: m.AutomationCreateAutomationRulePagePage,\n }))\n);\nconst AutomationAutomationRuleDetailPagePage = lazy(() =>\n import('./pages/AutomationAutomationRuleDetailPagePage').then((m) => ({\n default: m.AutomationAutomationRuleDetailPagePage,\n }))\n);\nconst TemplatesTemplatesPagePage = lazy(() =>\n import('./pages/TemplatesTemplatesPagePage').then((m) => ({\n default: m.TemplatesTemplatesPagePage,\n }))\n);\nconst TemplatesEditTemplatePagePage = lazy(() =>\n import('./pages/TemplatesEditTemplatePagePage').then((m) => ({\n default: m.TemplatesEditTemplatePagePage,\n }))\n);\nconst RisksRiskRegisterPagePage = lazy(() =>\n import('./pages/RisksRiskRegisterPagePage').then((m) => ({\n default: m.RisksRiskRegisterPagePage,\n }))\n);\nconst RisksRiskDetailPagePage = lazy(() =>\n import('./pages/RisksRiskDetailPagePage').then((m) => ({ default: m.RisksRiskDetailPagePage }))\n);\nconst ProjectsCriticalPathPagePage = lazy(() =>\n import('./pages/ProjectsCriticalPathPagePage').then((m) => ({\n default: m.ProjectsCriticalPathPagePage,\n }))\n);\n\n// Phase 2 new pages\n\nfunction PageLoader() {\n return (\n <div className=\"flex min-h-[320px] items-center justify-center\">\n <Loader2 className=\"h-8 w-8 animate-spin text-primary\" />\n </div>\n );\n}\n\nexport function PlanMagnetRoutes() {\n return (\n <Suspense fallback={<PageLoader />}>\n <Routes>\n <Route index element={<DashboardDashboardPagePage />} />\n {/* Dashboard */}\n <Route path=\"dashboard/dashboard-page\" element={<DashboardDashboardPagePage />} />\n {/* Products */}\n {/*\n The detail/edit/analytics pages below read their record id with\n useParams<{ id: string }>(). Each therefore needs a \":id\" segment — without one the\n id is permanently undefined and the page can never load a record, however it is\n reached. The bare paths are kept alongside so previously-bookmarked URLs still\n resolve rather than falling through to the catch-all redirect.\n */}\n <Route path=\"products/products-page\" element={<ProductsProductsPagePage />} />\n <Route path=\"products/create-product-page\" element={<ProductsCreateProductPagePage />} />\n <Route path=\"products/edit-product-page\" element={<ProductsEditProductPagePage />} />\n <Route path=\"products/edit-product-page/:id\" element={<ProductsEditProductPagePage />} />\n <Route path=\"products/product-detail-page\" element={<ProductsProductDetailPagePage />} />\n <Route\n path=\"products/product-detail-page/:id\"\n element={<ProductsProductDetailPagePage />}\n />\n <Route path=\"products/features-page\" element={<ProductsFeaturesPagePage />} />\n <Route path=\"products/new-feature-page\" element={<ProductsNewFeaturePagePage />} />\n <Route path=\"products/feature-detail-page\" element={<ProductsFeatureDetailPagePage />} />\n <Route\n path=\"products/feature-detail-page/:id\"\n element={<ProductsFeatureDetailPagePage />}\n />\n <Route\n path=\"products/feature-analytics-page\"\n element={<ProductsFeatureAnalyticsPagePage />}\n />\n <Route\n path=\"products/feature-analytics-page/:id\"\n element={<ProductsFeatureAnalyticsPagePage />}\n />\n <Route path=\"products/releases-page\" element={<ProductsReleasesPagePage />} />\n <Route path=\"products/release-detail-page\" element={<ProductsReleaseDetailPagePage />} />\n <Route\n path=\"products/release-detail-page/:id\"\n element={<ProductsReleaseDetailPagePage />}\n />\n <Route path=\"products/edit-release-page\" element={<ProductsEditReleasePagePage />} />\n <Route path=\"products/edit-release-page/:id\" element={<ProductsEditReleasePagePage />} />\n <Route path=\"products/roadmaps-page\" element={<ProductsRoadmapsPagePage />} />\n <Route path=\"products/roadmap-detail-page\" element={<ProductsRoadmapDetailPagePage />} />\n <Route\n path=\"products/roadmap-detail-page/:id\"\n element={<ProductsRoadmapDetailPagePage />}\n />\n <Route path=\"products/create-roadmap-page\" element={<ProductsCreateRoadmapPagePage />} />\n <Route\n path=\"products/roadmap-analytics-page\"\n element={<ProductsRoadmapAnalyticsPagePage />}\n />\n <Route\n path=\"products/roadmap-analytics-page/:id\"\n element={<ProductsRoadmapAnalyticsPagePage />}\n />\n {/* Portfolios (BOFF-8047) */}\n <Route path=\"products/portfolios-page\" element={<PortfoliosPortfoliosPagePage />} />\n <Route\n path=\"products/create-portfolio-page\"\n element={<PortfoliosCreatePortfolioPagePage />}\n />\n <Route\n path=\"products/portfolio-detail-page/:id\"\n element={<PortfoliosPortfolioDetailPagePage />}\n />\n <Route\n path=\"products/edit-portfolio-page/:id\"\n element={<PortfoliosEditPortfolioPagePage />}\n />\n {/* Programs (BOFF-8047) */}\n <Route path=\"products/programs-page\" element={<ProgramsProgramsPagePage />} />\n <Route path=\"products/create-program-page\" element={<ProgramsCreateProgramPagePage />} />\n <Route\n path=\"products/program-detail-page/:id\"\n element={<ProgramsProgramDetailPagePage />}\n />\n <Route path=\"products/edit-program-page/:id\" element={<ProgramsEditProgramPagePage />} />\n {/* Competitors (BOFF-8047) */}\n <Route path=\"products/competitors-page\" element={<CompetitorsCompetitorsPagePage />} />\n <Route\n path=\"products/create-competitor-page\"\n element={<CompetitorsCreateCompetitorPagePage />}\n />\n <Route\n path=\"products/competitor-detail-page/:id\"\n element={<CompetitorsCompetitorDetailPagePage />}\n />\n <Route\n path=\"products/edit-competitor-page/:id\"\n element={<CompetitorsEditCompetitorPagePage />}\n />\n {/* Projects */}\n <Route path=\"projects/projects-page\" element={<ProjectsProjectsPagePage />} />\n <Route path=\"projects/active-projects-page\" element={<ProjectsActiveProjectsPagePage />} />\n <Route path=\"projects/create-project-page\" element={<ProjectsCreateProjectPagePage />} />\n <Route path=\"projects/edit-project-page\" element={<ProjectsEditProjectPagePage />} />\n <Route path=\"projects/edit-project-page/:id\" element={<ProjectsEditProjectPagePage />} />\n <Route path=\"projects/project-detail-page\" element={<ProjectsProjectDetailPagePage />} />\n <Route\n path=\"projects/project-detail-page/:id\"\n element={<ProjectsProjectDetailPagePage />}\n />\n <Route path=\"projects/project-workflow-page/:id\" element={<ProjectsWorkflowPagePage />} />\n <Route\n path=\"projects/project-custom-fields-page/:id\"\n element={<ProjectsCustomFieldsPagePage />}\n />\n <Route path=\"projects/milestones-page\" element={<ProjectsMilestonesPagePage />} />\n <Route\n path=\"projects/milestone-detail-page\"\n element={<ProjectsMilestoneDetailPagePage />}\n />\n <Route\n path=\"projects/milestone-detail-page/:id\"\n element={<ProjectsMilestoneDetailPagePage />}\n />\n <Route path=\"projects/planning-page\" element={<ProjectsPlanningPagePage />} />\n <Route path=\"projects/planning-detail-page\" element={<ProjectsPlanningDetailPagePage />} />\n <Route\n path=\"projects/planning-detail-page/:id\"\n element={<ProjectsPlanningDetailPagePage />}\n />\n <Route path=\"projects/planning-edit-page\" element={<ProjectsPlanningEditPagePage />} />\n <Route path=\"projects/planning-edit-page/:id\" element={<ProjectsPlanningEditPagePage />} />\n <Route path=\"projects/budgets-page\" element={<ProjectsBudgetsPagePage />} />\n <Route path=\"projects/budget-detail-page\" element={<ProjectsBudgetDetailPagePage />} />\n <Route path=\"projects/budget-detail-page/:id\" element={<ProjectsBudgetDetailPagePage />} />\n {/* Critical path (BOFF-8047): CPM over WorkItemDependency, scoped to a project. */}\n <Route path=\"projects/critical-path-page\" element={<ProjectsCriticalPathPagePage />} />\n <Route path=\"projects/critical-path-page/:id\" element={<ProjectsCriticalPathPagePage />} />\n {/* Goals (OKRs, BOFF-4441) */}\n <Route path=\"goals/goals-page\" element={<GoalsGoalsPagePage />} />\n <Route path=\"goals/create-objective-page\" element={<GoalsCreateObjectivePagePage />} />\n <Route path=\"goals/objective-detail-page\" element={<GoalsObjectiveDetailPagePage />} />\n {/* Tasks */}\n <Route path=\"tasks/tasks-page\" element={<TasksTasksPagePage />} />\n <Route path=\"tasks/create-task-page\" element={<TasksCreateTaskPagePage />} />\n <Route path=\"tasks/edit-task-page\" element={<TasksEditTaskPagePage />} />\n <Route path=\"tasks/task-detail-page\" element={<TasksTaskDetailPagePage />} />\n <Route path=\"tasks/import-page\" element={<TasksImportPagePage />} />\n <Route path=\"tasks/time-entries-page\" element={<TasksTimeEntriesPagePage />} />\n <Route path=\"tasks/timesheets-page\" element={<TasksTimesheetsPagePage />} />\n <Route path=\"tasks/timesheet-detail-page\" element={<TasksTimesheetDetailPagePage />} />\n <Route path=\"tasks/timesheet-detail-page/:id\" element={<TasksTimesheetDetailPagePage />} />\n {/* Sprints */}\n <Route path=\"sprints/start-sprint-page\" element={<SprintsStartSprintPagePage />} />\n\n <Route path=\"docs/docs-page\" element={<DocsDocsPagePage />} />\n <Route path=\"docs/doc-detail-page\" element={<DocsDocDetailPagePage />} />\n {/* Reports */}\n <Route path=\"reports/reports-page\" element={<ReportsReportsPagePage />} />\n <Route path=\"reports/create-report-page\" element={<ReportsCreateReportPagePage />} />\n {/* Team */}\n <Route path=\"team/team-page\" element={<TeamTeamPagePage />} />\n <Route path=\"team/create-team-page\" element={<TeamCreateTeamPagePage />} />\n <Route path=\"team/invite-member-page\" element={<TeamInviteMemberPagePage />} />\n {/* Workspace */}\n <Route\n path=\"workspace/create-workspace-page\"\n element={<WorkspaceCreateWorkspacePagePage />}\n />\n {/* Automation rules (BOFF-8047) */}\n <Route\n path=\"automation/automation-rules-page\"\n element={<AutomationAutomationRulesPagePage />}\n />\n <Route\n path=\"automation/create-automation-rule-page\"\n element={<AutomationCreateAutomationRulePagePage />}\n />\n <Route\n path=\"automation/automation-rule-detail-page\"\n element={<AutomationAutomationRuleDetailPagePage />}\n />\n <Route\n path=\"automation/automation-rule-detail-page/:id\"\n element={<AutomationAutomationRuleDetailPagePage />}\n />\n {/* Project templates (BOFF-8047) */}\n <Route path=\"templates/templates-page\" element={<TemplatesTemplatesPagePage />} />\n <Route path=\"templates/edit-template-page\" element={<TemplatesEditTemplatePagePage />} />\n <Route\n path=\"templates/edit-template-page/:id\"\n element={<TemplatesEditTemplatePagePage />}\n />\n {/* Risks (BOFF-8047) */}\n <Route path=\"risks/risk-register-page\" element={<RisksRiskRegisterPagePage />} />\n <Route path=\"risks/risk-detail-page\" element={<RisksRiskDetailPagePage />} />\n <Route path=\"risks/risk-detail-page/:id\" element={<RisksRiskDetailPagePage />} />\n {/* Analytics */}\n <Route path=\"analytics/analytics-page\" element={<AnalyticsAnalyticsPagePage />} />\n {/* 404 — a real page, not a redirect to the same URL (H5) */}\n <Route path=\"*\" element={<PlanMagnetNotFoundPage />} />\n </Routes>\n </Suspense>\n );\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"PlanMagnetRoutes.js","names":[],"sources":["../../src/planmagnet/PlanMagnetRoutes.tsx"],"sourcesContent":["import { lazy, Suspense } from 'react';\nimport { Route, Routes } from 'react-router';\nimport { Loader2 } from 'lucide-react';\nimport { AnalyticsAnalyticsPagePage } from './pages/AnalyticsAnalyticsPagePage';\n\nconst PlanMagnetNotFoundPage = lazy(() =>\n import('./pages/NotFoundPage').then((m) => ({ default: m.PlanMagnetNotFoundPage }))\n);\nconst DocsDocsPagePage = lazy(() =>\n import('./pages/DocsDocsPagePage').then((m) => ({ default: m.DocsDocsPagePage }))\n);\nconst DocsDocDetailPagePage = lazy(() =>\n import('./pages/DocsDocDetailPagePage').then((m) => ({ default: m.DocsDocDetailPagePage }))\n);\nconst DashboardDashboardPagePage = lazy(() =>\n import('./pages/DashboardDashboardPagePage').then((m) => ({\n default: m.DashboardDashboardPagePage,\n }))\n);\nconst ProductsCreateProductPagePage = lazy(() =>\n import('./pages/ProductsCreateProductPagePage').then((m) => ({\n default: m.ProductsCreateProductPagePage,\n }))\n);\nconst ProductsCreateRoadmapPagePage = lazy(() =>\n import('./pages/ProductsCreateRoadmapPagePage').then((m) => ({\n default: m.ProductsCreateRoadmapPagePage,\n }))\n);\nconst ProductsEditProductPagePage = lazy(() =>\n import('./pages/ProductsEditProductPagePage').then((m) => ({\n default: m.ProductsEditProductPagePage,\n }))\n);\nconst ProductsEditReleasePagePage = lazy(() =>\n import('./pages/ProductsEditReleasePagePage').then((m) => ({\n default: m.ProductsEditReleasePagePage,\n }))\n);\nconst ProductsFeatureAnalyticsPagePage = lazy(() =>\n import('./pages/ProductsFeatureAnalyticsPagePage').then((m) => ({\n default: m.ProductsFeatureAnalyticsPagePage,\n }))\n);\nconst ProductsFeatureDetailPagePage = lazy(() =>\n import('./pages/ProductsFeatureDetailPagePage').then((m) => ({\n default: m.ProductsFeatureDetailPagePage,\n }))\n);\nconst ProductsFeaturesPagePage = lazy(() =>\n import('./pages/ProductsFeaturesPagePage').then((m) => ({ default: m.ProductsFeaturesPagePage }))\n);\nconst ProductsNewFeaturePagePage = lazy(() =>\n import('./pages/ProductsNewFeaturePagePage').then((m) => ({\n default: m.ProductsNewFeaturePagePage,\n }))\n);\nconst ProductsProductDetailPagePage = lazy(() =>\n import('./pages/ProductsProductDetailPagePage').then((m) => ({\n default: m.ProductsProductDetailPagePage,\n }))\n);\nconst ProductsProductsPagePage = lazy(() =>\n import('./pages/ProductsProductsPagePage').then((m) => ({ default: m.ProductsProductsPagePage }))\n);\nconst ProductsReleaseDetailPagePage = lazy(() =>\n import('./pages/ProductsReleaseDetailPagePage').then((m) => ({\n default: m.ProductsReleaseDetailPagePage,\n }))\n);\nconst ProductsReleasesPagePage = lazy(() =>\n import('./pages/ProductsReleasesPagePage').then((m) => ({ default: m.ProductsReleasesPagePage }))\n);\nconst ProductsRoadmapAnalyticsPagePage = lazy(() =>\n import('./pages/ProductsRoadmapAnalyticsPagePage').then((m) => ({\n default: m.ProductsRoadmapAnalyticsPagePage,\n }))\n);\nconst ProductsRoadmapDetailPagePage = lazy(() =>\n import('./pages/ProductsRoadmapDetailPagePage').then((m) => ({\n default: m.ProductsRoadmapDetailPagePage,\n }))\n);\nconst ProductsRoadmapsPagePage = lazy(() =>\n import('./pages/ProductsRoadmapsPagePage').then((m) => ({ default: m.ProductsRoadmapsPagePage }))\n);\nconst PortfoliosPortfoliosPagePage = lazy(() =>\n import('./pages/PortfoliosPortfoliosPagePage').then((m) => ({\n default: m.PortfoliosPortfoliosPagePage,\n }))\n);\nconst PortfoliosCreatePortfolioPagePage = lazy(() =>\n import('./pages/PortfoliosCreatePortfolioPagePage').then((m) => ({\n default: m.PortfoliosCreatePortfolioPagePage,\n }))\n);\nconst PortfoliosPortfolioDetailPagePage = lazy(() =>\n import('./pages/PortfoliosPortfolioDetailPagePage').then((m) => ({\n default: m.PortfoliosPortfolioDetailPagePage,\n }))\n);\nconst PortfoliosEditPortfolioPagePage = lazy(() =>\n import('./pages/PortfoliosEditPortfolioPagePage').then((m) => ({\n default: m.PortfoliosEditPortfolioPagePage,\n }))\n);\nconst ProgramsProgramsPagePage = lazy(() =>\n import('./pages/ProgramsProgramsPagePage').then((m) => ({ default: m.ProgramsProgramsPagePage }))\n);\nconst ProgramsCreateProgramPagePage = lazy(() =>\n import('./pages/ProgramsCreateProgramPagePage').then((m) => ({\n default: m.ProgramsCreateProgramPagePage,\n }))\n);\nconst ProgramsProgramDetailPagePage = lazy(() =>\n import('./pages/ProgramsProgramDetailPagePage').then((m) => ({\n default: m.ProgramsProgramDetailPagePage,\n }))\n);\nconst ProgramsEditProgramPagePage = lazy(() =>\n import('./pages/ProgramsEditProgramPagePage').then((m) => ({\n default: m.ProgramsEditProgramPagePage,\n }))\n);\nconst CompetitorsCompetitorsPagePage = lazy(() =>\n import('./pages/CompetitorsCompetitorsPagePage').then((m) => ({\n default: m.CompetitorsCompetitorsPagePage,\n }))\n);\nconst CompetitorsCreateCompetitorPagePage = lazy(() =>\n import('./pages/CompetitorsCreateCompetitorPagePage').then((m) => ({\n default: m.CompetitorsCreateCompetitorPagePage,\n }))\n);\nconst CompetitorsCompetitorDetailPagePage = lazy(() =>\n import('./pages/CompetitorsCompetitorDetailPagePage').then((m) => ({\n default: m.CompetitorsCompetitorDetailPagePage,\n }))\n);\nconst CompetitorsEditCompetitorPagePage = lazy(() =>\n import('./pages/CompetitorsEditCompetitorPagePage').then((m) => ({\n default: m.CompetitorsEditCompetitorPagePage,\n }))\n);\nconst ProjectsActiveProjectsPagePage = lazy(() =>\n import('./pages/ProjectsActiveProjectsPagePage').then((m) => ({\n default: m.ProjectsActiveProjectsPagePage,\n }))\n);\nconst ProjectsCreateProjectPagePage = lazy(() =>\n import('./pages/ProjectsCreateProjectPagePage').then((m) => ({\n default: m.ProjectsCreateProjectPagePage,\n }))\n);\nconst ProjectsEditProjectPagePage = lazy(() =>\n import('./pages/ProjectsEditProjectPagePage').then((m) => ({\n default: m.ProjectsEditProjectPagePage,\n }))\n);\nconst ProjectsMilestoneDetailPagePage = lazy(() =>\n import('./pages/ProjectsMilestoneDetailPagePage').then((m) => ({\n default: m.ProjectsMilestoneDetailPagePage,\n }))\n);\nconst ProjectsBudgetsPagePage = lazy(() =>\n import('./pages/ProjectsBudgetsPagePage').then((m) => ({ default: m.ProjectsBudgetsPagePage }))\n);\nconst ProjectsBudgetDetailPagePage = lazy(() =>\n import('./pages/ProjectsBudgetDetailPagePage').then((m) => ({\n default: m.ProjectsBudgetDetailPagePage,\n }))\n);\nconst TasksTimeEntriesPagePage = lazy(() =>\n import('./pages/TasksTimeEntriesPagePage').then((m) => ({\n default: m.TasksTimeEntriesPagePage,\n }))\n);\nconst TasksTimesheetsPagePage = lazy(() =>\n import('./pages/TasksTimesheetsPagePage').then((m) => ({\n default: m.TasksTimesheetsPagePage,\n }))\n);\nconst TasksTimesheetDetailPagePage = lazy(() =>\n import('./pages/TasksTimesheetDetailPagePage').then((m) => ({\n default: m.TasksTimesheetDetailPagePage,\n }))\n);\nconst GoalsGoalsPagePage = lazy(() =>\n import('./pages/GoalsGoalsPagePage').then((m) => ({ default: m.GoalsGoalsPagePage }))\n);\nconst GoalsCreateObjectivePagePage = lazy(() =>\n import('./pages/GoalsCreateObjectivePagePage').then((m) => ({\n default: m.GoalsCreateObjectivePagePage,\n }))\n);\nconst GoalsObjectiveDetailPagePage = lazy(() =>\n import('./pages/GoalsObjectiveDetailPagePage').then((m) => ({\n default: m.GoalsObjectiveDetailPagePage,\n }))\n);\nconst ProjectsMilestonesPagePage = lazy(() =>\n import('./pages/ProjectsMilestonesPagePage').then((m) => ({\n default: m.ProjectsMilestonesPagePage,\n }))\n);\nconst ProjectsPlanningDetailPagePage = lazy(() =>\n import('./pages/ProjectsPlanningDetailPagePage').then((m) => ({\n default: m.ProjectsPlanningDetailPagePage,\n }))\n);\nconst ProjectsPlanningEditPagePage = lazy(() =>\n import('./pages/ProjectsPlanningEditPagePage').then((m) => ({\n default: m.ProjectsPlanningEditPagePage,\n }))\n);\nconst ProjectsPlanningPagePage = lazy(() =>\n import('./pages/ProjectsPlanningPagePage').then((m) => ({ default: m.ProjectsPlanningPagePage }))\n);\nconst ProjectsProjectDetailPagePage = lazy(() =>\n import('./pages/ProjectsProjectDetailPagePage').then((m) => ({\n default: m.ProjectsProjectDetailPagePage,\n }))\n);\nconst ProjectsProjectsPagePage = lazy(() =>\n import('./pages/ProjectsProjectsPagePage').then((m) => ({ default: m.ProjectsProjectsPagePage }))\n);\nconst ReportsCreateReportPagePage = lazy(() =>\n import('./pages/ReportsCreateReportPagePage').then((m) => ({\n default: m.ReportsCreateReportPagePage,\n }))\n);\nconst ReportsReportsPagePage = lazy(() =>\n import('./pages/ReportsReportsPagePage').then((m) => ({ default: m.ReportsReportsPagePage }))\n);\nconst SprintsStartSprintPagePage = lazy(() =>\n import('./pages/SprintsStartSprintPagePage').then((m) => ({\n default: m.SprintsStartSprintPagePage,\n }))\n);\nconst TasksCreateTaskPagePage = lazy(() =>\n import('./pages/TasksCreateTaskPagePage').then((m) => ({ default: m.TasksCreateTaskPagePage }))\n);\nconst TasksEditTaskPagePage = lazy(() =>\n import('./pages/TasksEditTaskPagePage').then((m) => ({ default: m.TasksEditTaskPagePage }))\n);\nconst ProjectsWorkflowPagePage = lazy(() =>\n import('./pages/ProjectsWorkflowPagePage').then((m) => ({ default: m.ProjectsWorkflowPagePage }))\n);\nconst ProjectsCustomFieldsPagePage = lazy(() =>\n import('./pages/ProjectsCustomFieldsPagePage').then((m) => ({\n default: m.ProjectsCustomFieldsPagePage,\n }))\n);\nconst TasksImportPagePage = lazy(() =>\n import('./pages/TasksImportPagePage').then((m) => ({ default: m.TasksImportPagePage }))\n);\nconst TasksTaskDetailPagePage = lazy(() =>\n import('./pages/TasksTaskDetailPagePage').then((m) => ({ default: m.TasksTaskDetailPagePage }))\n);\nconst TasksTasksPagePage = lazy(() =>\n import('./pages/TasksTasksPagePage').then((m) => ({ default: m.TasksTasksPagePage }))\n);\nconst TeamCreateTeamPagePage = lazy(() =>\n import('./pages/TeamCreateTeamPagePage').then((m) => ({ default: m.TeamCreateTeamPagePage }))\n);\nconst TeamInviteMemberPagePage = lazy(() =>\n import('./pages/TeamInviteMemberPagePage').then((m) => ({ default: m.TeamInviteMemberPagePage }))\n);\nconst TeamTeamPagePage = lazy(() =>\n import('./pages/TeamTeamPagePage').then((m) => ({ default: m.TeamTeamPagePage }))\n);\nconst TeamTeamsListPagePage = lazy(() =>\n import('./pages/TeamTeamsListPagePage').then((m) => ({ default: m.TeamTeamsListPagePage }))\n);\nconst TeamTeamDetailPagePage = lazy(() =>\n import('./pages/TeamTeamDetailPagePage').then((m) => ({ default: m.TeamTeamDetailPagePage }))\n);\nconst TeamTeamEditPagePage = lazy(() =>\n import('./pages/TeamTeamEditPagePage').then((m) => ({ default: m.TeamTeamEditPagePage }))\n);\nconst WorkspaceCreateWorkspacePagePage = lazy(() =>\n import('./pages/WorkspaceCreateWorkspacePagePage').then((m) => ({\n default: m.WorkspaceCreateWorkspacePagePage,\n }))\n);\n// BOFF-8047: Automation rules and Project templates\nconst AutomationAutomationRulesPagePage = lazy(() =>\n import('./pages/AutomationAutomationRulesPagePage').then((m) => ({\n default: m.AutomationAutomationRulesPagePage,\n }))\n);\nconst AutomationCreateAutomationRulePagePage = lazy(() =>\n import('./pages/AutomationCreateAutomationRulePagePage').then((m) => ({\n default: m.AutomationCreateAutomationRulePagePage,\n }))\n);\nconst AutomationAutomationRuleDetailPagePage = lazy(() =>\n import('./pages/AutomationAutomationRuleDetailPagePage').then((m) => ({\n default: m.AutomationAutomationRuleDetailPagePage,\n }))\n);\nconst TemplatesTemplatesPagePage = lazy(() =>\n import('./pages/TemplatesTemplatesPagePage').then((m) => ({\n default: m.TemplatesTemplatesPagePage,\n }))\n);\nconst TemplatesEditTemplatePagePage = lazy(() =>\n import('./pages/TemplatesEditTemplatePagePage').then((m) => ({\n default: m.TemplatesEditTemplatePagePage,\n }))\n);\nconst RisksRiskRegisterPagePage = lazy(() =>\n import('./pages/RisksRiskRegisterPagePage').then((m) => ({\n default: m.RisksRiskRegisterPagePage,\n }))\n);\nconst RisksRiskDetailPagePage = lazy(() =>\n import('./pages/RisksRiskDetailPagePage').then((m) => ({ default: m.RisksRiskDetailPagePage }))\n);\nconst ProjectsCriticalPathPagePage = lazy(() =>\n import('./pages/ProjectsCriticalPathPagePage').then((m) => ({\n default: m.ProjectsCriticalPathPagePage,\n }))\n);\n\n// Phase 2 new pages\n\nfunction PageLoader() {\n return (\n <div className=\"flex min-h-[320px] items-center justify-center\">\n <Loader2 className=\"h-8 w-8 animate-spin text-primary\" />\n </div>\n );\n}\n\nexport function PlanMagnetRoutes() {\n return (\n <Suspense fallback={<PageLoader />}>\n <Routes>\n <Route index element={<DashboardDashboardPagePage />} />\n {/* Dashboard */}\n <Route path=\"dashboard/dashboard-page\" element={<DashboardDashboardPagePage />} />\n {/* Products */}\n {/*\n The detail/edit/analytics pages below read their record id with\n useParams<{ id: string }>(). Each therefore needs a \":id\" segment — without one the\n id is permanently undefined and the page can never load a record, however it is\n reached. The bare paths are kept alongside so previously-bookmarked URLs still\n resolve rather than falling through to the catch-all redirect.\n */}\n <Route path=\"products/products-page\" element={<ProductsProductsPagePage />} />\n <Route path=\"products/create-product-page\" element={<ProductsCreateProductPagePage />} />\n <Route path=\"products/edit-product-page\" element={<ProductsEditProductPagePage />} />\n <Route path=\"products/edit-product-page/:id\" element={<ProductsEditProductPagePage />} />\n <Route path=\"products/product-detail-page\" element={<ProductsProductDetailPagePage />} />\n <Route\n path=\"products/product-detail-page/:id\"\n element={<ProductsProductDetailPagePage />}\n />\n <Route path=\"products/features-page\" element={<ProductsFeaturesPagePage />} />\n <Route path=\"products/new-feature-page\" element={<ProductsNewFeaturePagePage />} />\n <Route path=\"products/feature-detail-page\" element={<ProductsFeatureDetailPagePage />} />\n <Route\n path=\"products/feature-detail-page/:id\"\n element={<ProductsFeatureDetailPagePage />}\n />\n <Route\n path=\"products/feature-analytics-page\"\n element={<ProductsFeatureAnalyticsPagePage />}\n />\n <Route\n path=\"products/feature-analytics-page/:id\"\n element={<ProductsFeatureAnalyticsPagePage />}\n />\n <Route path=\"products/releases-page\" element={<ProductsReleasesPagePage />} />\n <Route path=\"products/release-detail-page\" element={<ProductsReleaseDetailPagePage />} />\n <Route\n path=\"products/release-detail-page/:id\"\n element={<ProductsReleaseDetailPagePage />}\n />\n <Route path=\"products/edit-release-page\" element={<ProductsEditReleasePagePage />} />\n <Route path=\"products/edit-release-page/:id\" element={<ProductsEditReleasePagePage />} />\n <Route path=\"products/roadmaps-page\" element={<ProductsRoadmapsPagePage />} />\n <Route path=\"products/roadmap-detail-page\" element={<ProductsRoadmapDetailPagePage />} />\n <Route\n path=\"products/roadmap-detail-page/:id\"\n element={<ProductsRoadmapDetailPagePage />}\n />\n <Route path=\"products/create-roadmap-page\" element={<ProductsCreateRoadmapPagePage />} />\n <Route\n path=\"products/roadmap-analytics-page\"\n element={<ProductsRoadmapAnalyticsPagePage />}\n />\n <Route\n path=\"products/roadmap-analytics-page/:id\"\n element={<ProductsRoadmapAnalyticsPagePage />}\n />\n {/* Portfolios (BOFF-8047) */}\n <Route path=\"products/portfolios-page\" element={<PortfoliosPortfoliosPagePage />} />\n <Route\n path=\"products/create-portfolio-page\"\n element={<PortfoliosCreatePortfolioPagePage />}\n />\n <Route\n path=\"products/portfolio-detail-page/:id\"\n element={<PortfoliosPortfolioDetailPagePage />}\n />\n <Route\n path=\"products/edit-portfolio-page/:id\"\n element={<PortfoliosEditPortfolioPagePage />}\n />\n {/* Programs (BOFF-8047) */}\n <Route path=\"products/programs-page\" element={<ProgramsProgramsPagePage />} />\n <Route path=\"products/create-program-page\" element={<ProgramsCreateProgramPagePage />} />\n <Route\n path=\"products/program-detail-page/:id\"\n element={<ProgramsProgramDetailPagePage />}\n />\n <Route path=\"products/edit-program-page/:id\" element={<ProgramsEditProgramPagePage />} />\n {/* Competitors (BOFF-8047) */}\n <Route path=\"products/competitors-page\" element={<CompetitorsCompetitorsPagePage />} />\n <Route\n path=\"products/create-competitor-page\"\n element={<CompetitorsCreateCompetitorPagePage />}\n />\n <Route\n path=\"products/competitor-detail-page/:id\"\n element={<CompetitorsCompetitorDetailPagePage />}\n />\n <Route\n path=\"products/edit-competitor-page/:id\"\n element={<CompetitorsEditCompetitorPagePage />}\n />\n {/* Projects */}\n <Route path=\"projects/projects-page\" element={<ProjectsProjectsPagePage />} />\n <Route path=\"projects/active-projects-page\" element={<ProjectsActiveProjectsPagePage />} />\n <Route path=\"projects/create-project-page\" element={<ProjectsCreateProjectPagePage />} />\n <Route path=\"projects/edit-project-page\" element={<ProjectsEditProjectPagePage />} />\n <Route path=\"projects/edit-project-page/:id\" element={<ProjectsEditProjectPagePage />} />\n <Route path=\"projects/project-detail-page\" element={<ProjectsProjectDetailPagePage />} />\n <Route\n path=\"projects/project-detail-page/:id\"\n element={<ProjectsProjectDetailPagePage />}\n />\n <Route path=\"projects/project-workflow-page/:id\" element={<ProjectsWorkflowPagePage />} />\n <Route\n path=\"projects/project-custom-fields-page/:id\"\n element={<ProjectsCustomFieldsPagePage />}\n />\n <Route path=\"projects/milestones-page\" element={<ProjectsMilestonesPagePage />} />\n <Route\n path=\"projects/milestone-detail-page\"\n element={<ProjectsMilestoneDetailPagePage />}\n />\n <Route\n path=\"projects/milestone-detail-page/:id\"\n element={<ProjectsMilestoneDetailPagePage />}\n />\n <Route path=\"projects/planning-page\" element={<ProjectsPlanningPagePage />} />\n <Route path=\"projects/planning-detail-page\" element={<ProjectsPlanningDetailPagePage />} />\n <Route\n path=\"projects/planning-detail-page/:id\"\n element={<ProjectsPlanningDetailPagePage />}\n />\n <Route path=\"projects/planning-edit-page\" element={<ProjectsPlanningEditPagePage />} />\n <Route path=\"projects/planning-edit-page/:id\" element={<ProjectsPlanningEditPagePage />} />\n <Route path=\"projects/budgets-page\" element={<ProjectsBudgetsPagePage />} />\n <Route path=\"projects/budget-detail-page\" element={<ProjectsBudgetDetailPagePage />} />\n <Route path=\"projects/budget-detail-page/:id\" element={<ProjectsBudgetDetailPagePage />} />\n {/* Critical path (BOFF-8047): CPM over WorkItemDependency, scoped to a project. */}\n <Route path=\"projects/critical-path-page\" element={<ProjectsCriticalPathPagePage />} />\n <Route path=\"projects/critical-path-page/:id\" element={<ProjectsCriticalPathPagePage />} />\n {/* Goals (OKRs, BOFF-4441) */}\n <Route path=\"goals/goals-page\" element={<GoalsGoalsPagePage />} />\n <Route path=\"goals/create-objective-page\" element={<GoalsCreateObjectivePagePage />} />\n <Route path=\"goals/objective-detail-page\" element={<GoalsObjectiveDetailPagePage />} />\n {/* Tasks */}\n <Route path=\"tasks/tasks-page\" element={<TasksTasksPagePage />} />\n <Route path=\"tasks/create-task-page\" element={<TasksCreateTaskPagePage />} />\n <Route path=\"tasks/edit-task-page\" element={<TasksEditTaskPagePage />} />\n <Route path=\"tasks/task-detail-page\" element={<TasksTaskDetailPagePage />} />\n <Route path=\"tasks/import-page\" element={<TasksImportPagePage />} />\n <Route path=\"tasks/time-entries-page\" element={<TasksTimeEntriesPagePage />} />\n <Route path=\"tasks/timesheets-page\" element={<TasksTimesheetsPagePage />} />\n <Route path=\"tasks/timesheet-detail-page\" element={<TasksTimesheetDetailPagePage />} />\n <Route path=\"tasks/timesheet-detail-page/:id\" element={<TasksTimesheetDetailPagePage />} />\n {/* Sprints */}\n <Route path=\"sprints/start-sprint-page\" element={<SprintsStartSprintPagePage />} />\n\n <Route path=\"docs/docs-page\" element={<DocsDocsPagePage />} />\n <Route path=\"docs/doc-detail-page\" element={<DocsDocDetailPagePage />} />\n {/* Reports */}\n <Route path=\"reports/reports-page\" element={<ReportsReportsPagePage />} />\n <Route path=\"reports/create-report-page\" element={<ReportsCreateReportPagePage />} />\n {/* Team */}\n <Route path=\"team/team-page\" element={<TeamTeamPagePage />} />\n <Route path=\"team/teams-page\" element={<TeamTeamsListPagePage />} />\n <Route path=\"team/team-detail-page\" element={<TeamTeamDetailPagePage />} />\n <Route path=\"team/team-detail-page/:id\" element={<TeamTeamDetailPagePage />} />\n <Route path=\"team/team-edit-page\" element={<TeamTeamEditPagePage />} />\n <Route path=\"team/team-edit-page/:id\" element={<TeamTeamEditPagePage />} />\n <Route path=\"team/create-team-page\" element={<TeamCreateTeamPagePage />} />\n <Route path=\"team/invite-member-page\" element={<TeamInviteMemberPagePage />} />\n {/* Workspace */}\n <Route\n path=\"workspace/create-workspace-page\"\n element={<WorkspaceCreateWorkspacePagePage />}\n />\n {/* Automation rules (BOFF-8047) */}\n <Route\n path=\"automation/automation-rules-page\"\n element={<AutomationAutomationRulesPagePage />}\n />\n <Route\n path=\"automation/create-automation-rule-page\"\n element={<AutomationCreateAutomationRulePagePage />}\n />\n <Route\n path=\"automation/automation-rule-detail-page\"\n element={<AutomationAutomationRuleDetailPagePage />}\n />\n <Route\n path=\"automation/automation-rule-detail-page/:id\"\n element={<AutomationAutomationRuleDetailPagePage />}\n />\n {/* Project templates (BOFF-8047) */}\n <Route path=\"templates/templates-page\" element={<TemplatesTemplatesPagePage />} />\n <Route path=\"templates/edit-template-page\" element={<TemplatesEditTemplatePagePage />} />\n <Route\n path=\"templates/edit-template-page/:id\"\n element={<TemplatesEditTemplatePagePage />}\n />\n {/* Risks (BOFF-8047) */}\n <Route path=\"risks/risk-register-page\" element={<RisksRiskRegisterPagePage />} />\n <Route path=\"risks/risk-detail-page\" element={<RisksRiskDetailPagePage />} />\n <Route path=\"risks/risk-detail-page/:id\" element={<RisksRiskDetailPagePage />} />\n {/* Analytics */}\n <Route path=\"analytics/analytics-page\" element={<AnalyticsAnalyticsPagePage />} />\n {/* 404 — a real page, not a redirect to the same URL (H5) */}\n <Route path=\"*\" element={<PlanMagnetNotFoundPage />} />\n </Routes>\n </Suspense>\n );\n}\n"],"mappings":"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"}
|
|
@@ -6,6 +6,13 @@ export declare function ProjectSelect({ id, value, onChange, noneLabel, exclude,
|
|
|
6
6
|
noneLabel?: string;
|
|
7
7
|
exclude?: string[];
|
|
8
8
|
}): import("react/jsx-runtime").JSX.Element;
|
|
9
|
+
/** A team select (BOFF-8044). '' means "no team" when `noneLabel` is given. */
|
|
10
|
+
export declare function TeamSelect({ id, value, onChange, noneLabel, }: {
|
|
11
|
+
id?: string;
|
|
12
|
+
value: string;
|
|
13
|
+
onChange: (teamId: string) => void;
|
|
14
|
+
noneLabel?: string;
|
|
15
|
+
}): import("react/jsx-runtime").JSX.Element;
|
|
9
16
|
/**
|
|
10
17
|
* Search, then pick one work item. The server matches the key, title and description. `exclude` hides items that are
|
|
11
18
|
* already linked (the result says how many more exist, so an empty list never claims "nothing left" falsely).
|
|
@@ -31,6 +38,13 @@ export declare function ProgramSelect({ id, value, onChange, noneLabel, }: {
|
|
|
31
38
|
onChange: (programId: string) => void;
|
|
32
39
|
noneLabel?: string;
|
|
33
40
|
}): import("react/jsx-runtime").JSX.Element;
|
|
41
|
+
/** A portfolio select (BOFF-8047). '' means "no portfolio" when `noneLabel` is given. */
|
|
42
|
+
export declare function PortfolioSelect({ id, value, onChange, noneLabel, }: {
|
|
43
|
+
id?: string;
|
|
44
|
+
value: string;
|
|
45
|
+
onChange: (portfolioId: string) => void;
|
|
46
|
+
noneLabel?: string;
|
|
47
|
+
}): import("react/jsx-runtime").JSX.Element;
|
|
34
48
|
/** Search, then pick one competitor. `exclude` hides competitors already linked. */
|
|
35
49
|
export declare function CompetitorSearchSelect({ id, value, onChange, exclude, }: {
|
|
36
50
|
id: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Pickers.d.ts","sourceRoot":"","sources":["../../../src/planmagnet/controls/Pickers.tsx"],"names":[],"mappings":"AA2BA,iHAAiH;AACjH,wBAAgB,aAAa,CAAC,EAC5B,EAAE,EACF,KAAK,EACL,QAAQ,EACR,SAAS,EACT,OAAY,GACb,EAAE;IACD,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;IACtC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;CACpB,2CA8BA;AAeD;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,EACnC,EAAE,EACF,SAAS,EACT,KAAK,EACL,QAAQ,EACR,OAAY,GACb,EAAE;IACD,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,IAAI,CAAC;IACvC,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;CACpB,2CAqDA;AAcD,iCAAiC;AACjC,wBAAgB,eAAe,CAAC,EAC9B,EAAE,EACF,KAAK,EACL,QAAQ,EACR,OAAY,GACb,EAAE;IACD,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;CACpB,2CA8CA;AAcD,yEAAyE;AACzE,wBAAgB,aAAa,CAAC,EAC5B,EAAE,EACF,KAAK,EACL,QAAQ,EACR,SAAS,GACV,EAAE;IACD,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;IACtC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,2CA8BA;AAcD,oFAAoF;AACpF,wBAAgB,sBAAsB,CAAC,EACrC,EAAE,EACF,KAAK,EACL,QAAQ,EACR,OAAY,GACb,EAAE;IACD,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,IAAI,CAAC;IACzC,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;CACpB,2CAkDA"}
|
|
1
|
+
{"version":3,"file":"Pickers.d.ts","sourceRoot":"","sources":["../../../src/planmagnet/controls/Pickers.tsx"],"names":[],"mappings":"AA2BA,iHAAiH;AACjH,wBAAgB,aAAa,CAAC,EAC5B,EAAE,EACF,KAAK,EACL,QAAQ,EACR,SAAS,EACT,OAAY,GACb,EAAE;IACD,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;IACtC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;CACpB,2CA8BA;AAcD,+EAA+E;AAC/E,wBAAgB,UAAU,CAAC,EACzB,EAAE,EACF,KAAK,EACL,QAAQ,EACR,SAAS,GACV,EAAE;IACD,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,2CA+BA;AAeD;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,EACnC,EAAE,EACF,SAAS,EACT,KAAK,EACL,QAAQ,EACR,OAAY,GACb,EAAE;IACD,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,IAAI,CAAC;IACvC,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;CACpB,2CAqDA;AAcD,iCAAiC;AACjC,wBAAgB,eAAe,CAAC,EAC9B,EAAE,EACF,KAAK,EACL,QAAQ,EACR,OAAY,GACb,EAAE;IACD,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;CACpB,2CA8CA;AAcD,yEAAyE;AACzE,wBAAgB,aAAa,CAAC,EAC5B,EAAE,EACF,KAAK,EACL,QAAQ,EACR,SAAS,GACV,EAAE;IACD,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;IACtC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,2CA8BA;AAcD,yFAAyF;AACzF,wBAAgB,eAAe,CAAC,EAC9B,EAAE,EACF,KAAK,EACL,QAAQ,EACR,SAAS,GACV,EAAE;IACD,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,2CA8BA;AAcD,oFAAoF;AACpF,wBAAgB,sBAAsB,CAAC,EACrC,EAAE,EACF,KAAK,EACL,QAAQ,EACR,OAAY,GACb,EAAE;IACD,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,IAAI,CAAC;IACzC,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;CACpB,2CAkDA"}
|
|
@@ -43,6 +43,44 @@ function u({ id: t, value: n, onChange: r, noneLabel: s, exclude: u = [] }) {
|
|
|
43
43
|
});
|
|
44
44
|
}
|
|
45
45
|
var d = r`
|
|
46
|
+
query PickerTeams($workspaceId: ID!) {
|
|
47
|
+
planmagnetTeams(workspaceId: $workspaceId, pagination: { first: 100 }) {
|
|
48
|
+
items {
|
|
49
|
+
id
|
|
50
|
+
name
|
|
51
|
+
}
|
|
52
|
+
totalCount
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
`;
|
|
56
|
+
function f({ id: t, value: n, onChange: r, noneLabel: s }) {
|
|
57
|
+
let { workspaceId: l } = e(), { data: u, loading: f, error: p } = i(d, {
|
|
58
|
+
variables: { workspaceId: l ?? "" },
|
|
59
|
+
skip: !l
|
|
60
|
+
}), m = u?.planmagnetTeams.items ?? [];
|
|
61
|
+
return /* @__PURE__ */ o("select", {
|
|
62
|
+
id: t,
|
|
63
|
+
"aria-label": t ? void 0 : "Team",
|
|
64
|
+
className: c,
|
|
65
|
+
value: n,
|
|
66
|
+
onChange: (e) => r(e.target.value),
|
|
67
|
+
children: [
|
|
68
|
+
s !== void 0 && /* @__PURE__ */ a("option", {
|
|
69
|
+
value: "",
|
|
70
|
+
children: s
|
|
71
|
+
}),
|
|
72
|
+
m.length === 0 && s === void 0 && /* @__PURE__ */ a("option", {
|
|
73
|
+
value: "",
|
|
74
|
+
children: f && !u ? "Loading teams…" : p ? "Teams could not be loaded" : "No teams yet"
|
|
75
|
+
}),
|
|
76
|
+
m.map((e) => /* @__PURE__ */ a("option", {
|
|
77
|
+
value: e.id,
|
|
78
|
+
children: e.name
|
|
79
|
+
}, e.id))
|
|
80
|
+
]
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
var p = r`
|
|
46
84
|
query PickerWorkItems($workspaceId: ID!, $filter: PlanmagnetWorkItemFilter) {
|
|
47
85
|
planmagnetWorkItems(workspaceId: $workspaceId, filter: $filter, pagination: { first: 20 }) {
|
|
48
86
|
items {
|
|
@@ -54,8 +92,8 @@ var d = r`
|
|
|
54
92
|
}
|
|
55
93
|
}
|
|
56
94
|
`;
|
|
57
|
-
function
|
|
58
|
-
let { workspaceId: m } = e(), [h, g] = n(""), _ = t(h.trim()), { data: v, loading: y } = i(
|
|
95
|
+
function m({ id: r, projectId: l, value: u, onChange: d, exclude: f = [] }) {
|
|
96
|
+
let { workspaceId: m } = e(), [h, g] = n(""), _ = t(h.trim()), { data: v, loading: y } = i(p, {
|
|
59
97
|
variables: {
|
|
60
98
|
workspaceId: m ?? "",
|
|
61
99
|
filter: {
|
|
@@ -64,7 +102,7 @@ function f({ id: r, projectId: l, value: u, onChange: f, exclude: p = [] }) {
|
|
|
64
102
|
}
|
|
65
103
|
},
|
|
66
104
|
skip: !m
|
|
67
|
-
}), b = v?.planmagnetWorkItems.items ?? [], x = b.filter((e) => !
|
|
105
|
+
}), b = v?.planmagnetWorkItems.items ?? [], x = b.filter((e) => !f.includes(e.id)), S = v?.planmagnetWorkItems.totalCount ?? 0;
|
|
68
106
|
return /* @__PURE__ */ o("div", {
|
|
69
107
|
className: "space-y-1",
|
|
70
108
|
children: [
|
|
@@ -78,7 +116,7 @@ function f({ id: r, projectId: l, value: u, onChange: f, exclude: p = [] }) {
|
|
|
78
116
|
id: r,
|
|
79
117
|
className: c,
|
|
80
118
|
value: u,
|
|
81
|
-
onChange: (e) =>
|
|
119
|
+
onChange: (e) => d(e.target.value),
|
|
82
120
|
children: [
|
|
83
121
|
/* @__PURE__ */ a("option", {
|
|
84
122
|
value: "",
|
|
@@ -111,7 +149,7 @@ function f({ id: r, projectId: l, value: u, onChange: f, exclude: p = [] }) {
|
|
|
111
149
|
]
|
|
112
150
|
});
|
|
113
151
|
}
|
|
114
|
-
var
|
|
152
|
+
var h = r`
|
|
115
153
|
query PickerDocs($workspaceId: String, $filter: PlanmagnetDocFilter) {
|
|
116
154
|
planmagnetDocs(workspaceId: $workspaceId, filter: $filter, pagination: { first: 20 }) {
|
|
117
155
|
items {
|
|
@@ -122,8 +160,8 @@ var p = r`
|
|
|
122
160
|
}
|
|
123
161
|
}
|
|
124
162
|
`;
|
|
125
|
-
function
|
|
126
|
-
let { workspaceId: f } = e(), [
|
|
163
|
+
function g({ id: r, value: l, onChange: u, exclude: d = [] }) {
|
|
164
|
+
let { workspaceId: f } = e(), [p, m] = n(""), g = t(p.trim()), { data: _, loading: v } = i(h, {
|
|
127
165
|
variables: {
|
|
128
166
|
workspaceId: f ?? "",
|
|
129
167
|
filter: g ? { search: g } : void 0
|
|
@@ -136,8 +174,8 @@ function m({ id: r, value: l, onChange: u, exclude: d = [] }) {
|
|
|
136
174
|
/* @__PURE__ */ a(s, {
|
|
137
175
|
"aria-label": "Search docs",
|
|
138
176
|
placeholder: "Search docs by title",
|
|
139
|
-
value:
|
|
140
|
-
onChange: (e) =>
|
|
177
|
+
value: p,
|
|
178
|
+
onChange: (e) => m(e.target.value)
|
|
141
179
|
}),
|
|
142
180
|
/* @__PURE__ */ o("select", {
|
|
143
181
|
id: r,
|
|
@@ -165,7 +203,7 @@ function m({ id: r, value: l, onChange: u, exclude: d = [] }) {
|
|
|
165
203
|
]
|
|
166
204
|
});
|
|
167
205
|
}
|
|
168
|
-
var
|
|
206
|
+
var _ = r`
|
|
169
207
|
query PickerPrograms($workspaceId: ID!) {
|
|
170
208
|
planmagnetPrograms(workspaceId: $workspaceId, pagination: { first: 100 }) {
|
|
171
209
|
items {
|
|
@@ -176,8 +214,8 @@ var h = r`
|
|
|
176
214
|
}
|
|
177
215
|
}
|
|
178
216
|
`;
|
|
179
|
-
function
|
|
180
|
-
let { workspaceId: l } = e(), { data: u, loading: d, error: f } = i(
|
|
217
|
+
function v({ id: t, value: n, onChange: r, noneLabel: s }) {
|
|
218
|
+
let { workspaceId: l } = e(), { data: u, loading: d, error: f } = i(_, {
|
|
181
219
|
variables: { workspaceId: l ?? "" },
|
|
182
220
|
skip: !l
|
|
183
221
|
}), p = u?.planmagnetPrograms.items ?? [];
|
|
@@ -202,7 +240,44 @@ function g({ id: t, value: n, onChange: r, noneLabel: s }) {
|
|
|
202
240
|
]
|
|
203
241
|
});
|
|
204
242
|
}
|
|
205
|
-
var
|
|
243
|
+
var y = r`
|
|
244
|
+
query PickerPortfolios($workspaceId: ID!) {
|
|
245
|
+
planmagnetPortfolios(workspaceId: $workspaceId, pagination: { first: 100 }) {
|
|
246
|
+
items {
|
|
247
|
+
id
|
|
248
|
+
name
|
|
249
|
+
}
|
|
250
|
+
totalCount
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
`;
|
|
254
|
+
function b({ id: t, value: n, onChange: r, noneLabel: s }) {
|
|
255
|
+
let { workspaceId: l } = e(), { data: u, loading: d, error: f } = i(y, {
|
|
256
|
+
variables: { workspaceId: l ?? "" },
|
|
257
|
+
skip: !l
|
|
258
|
+
}), p = u?.planmagnetPortfolios.items ?? [];
|
|
259
|
+
return /* @__PURE__ */ o("select", {
|
|
260
|
+
id: t,
|
|
261
|
+
className: c,
|
|
262
|
+
value: n,
|
|
263
|
+
onChange: (e) => r(e.target.value),
|
|
264
|
+
children: [
|
|
265
|
+
s !== void 0 && /* @__PURE__ */ a("option", {
|
|
266
|
+
value: "",
|
|
267
|
+
children: s
|
|
268
|
+
}),
|
|
269
|
+
p.length === 0 && s === void 0 && /* @__PURE__ */ a("option", {
|
|
270
|
+
value: "",
|
|
271
|
+
children: d && !u ? "Loading portfolios…" : f ? "Portfolios could not be loaded" : "No portfolios yet"
|
|
272
|
+
}),
|
|
273
|
+
p.map((e) => /* @__PURE__ */ a("option", {
|
|
274
|
+
value: e.id,
|
|
275
|
+
children: e.name
|
|
276
|
+
}, e.id))
|
|
277
|
+
]
|
|
278
|
+
});
|
|
279
|
+
}
|
|
280
|
+
var x = r`
|
|
206
281
|
query PickerCompetitors($workspaceId: ID!, $filter: PlanmagnetCompetitorFilter) {
|
|
207
282
|
planmagnetCompetitors(workspaceId: $workspaceId, filter: $filter, pagination: { first: 20 }) {
|
|
208
283
|
items {
|
|
@@ -213,14 +288,14 @@ var _ = r`
|
|
|
213
288
|
}
|
|
214
289
|
}
|
|
215
290
|
`;
|
|
216
|
-
function
|
|
217
|
-
let { workspaceId: f } = e(), [p, m] = n(""), h = t(p.trim()), { data: g, loading:
|
|
291
|
+
function S({ id: r, value: l, onChange: u, exclude: d = [] }) {
|
|
292
|
+
let { workspaceId: f } = e(), [p, m] = n(""), h = t(p.trim()), { data: g, loading: _ } = i(x, {
|
|
218
293
|
variables: {
|
|
219
294
|
workspaceId: f ?? "",
|
|
220
295
|
filter: h ? { search: h } : void 0
|
|
221
296
|
},
|
|
222
297
|
skip: !f
|
|
223
|
-
}),
|
|
298
|
+
}), v = g?.planmagnetCompetitors.items ?? [], y = v.filter((e) => !d.includes(e.id)), b = g?.planmagnetCompetitors.totalCount ?? 0;
|
|
224
299
|
return /* @__PURE__ */ o("div", {
|
|
225
300
|
className: "space-y-1",
|
|
226
301
|
children: [
|
|
@@ -237,19 +312,19 @@ function v({ id: r, value: l, onChange: u, exclude: d = [] }) {
|
|
|
237
312
|
onChange: (e) => u(e.target.value),
|
|
238
313
|
children: [/* @__PURE__ */ a("option", {
|
|
239
314
|
value: "",
|
|
240
|
-
children:
|
|
241
|
-
}),
|
|
315
|
+
children: _ && !g ? "Searching…" : y.length ? "Choose a competitor" : "No match"
|
|
316
|
+
}), y.map((e) => /* @__PURE__ */ a("option", {
|
|
242
317
|
value: e.id,
|
|
243
318
|
children: e.name
|
|
244
319
|
}, e.id))]
|
|
245
320
|
}),
|
|
246
|
-
|
|
321
|
+
b > v.length && /* @__PURE__ */ o("p", {
|
|
247
322
|
className: "text-xs text-muted-foreground",
|
|
248
323
|
children: [
|
|
249
324
|
"Showing ",
|
|
250
|
-
|
|
325
|
+
v.length,
|
|
251
326
|
" of ",
|
|
252
|
-
|
|
327
|
+
b,
|
|
253
328
|
" — type to narrow the list."
|
|
254
329
|
]
|
|
255
330
|
})
|
|
@@ -257,6 +332,6 @@ function v({ id: r, value: l, onChange: u, exclude: d = [] }) {
|
|
|
257
332
|
});
|
|
258
333
|
}
|
|
259
334
|
//#endregion
|
|
260
|
-
export {
|
|
335
|
+
export { S as CompetitorSearchSelect, g as DocSearchSelect, b as PortfolioSelect, v as ProgramSelect, u as ProjectSelect, f as TeamSelect, m as WorkItemSearchSelect };
|
|
261
336
|
|
|
262
337
|
//# sourceMappingURL=Pickers.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Pickers.js","names":[],"sources":["../../../src/planmagnet/controls/Pickers.tsx"],"sourcesContent":["import { useDeferredValue, useState } from 'react';\nimport { gql } from '@apollo/client';\nimport { useQuery } from '@apollo/client/react';\nimport { Input } from '@burdenoff/fe-libs/ui';\nimport { usePlanMagnet } from '../providers/PlanMagnetProvider';\n\n/**\n * Record pickers shared by forms and dialogs: a project select, and search-then-pick selects for work items and\n * docs. Values are record ids. Search runs on the server (never \"the first page, filtered in the browser\"), so a\n * record past the first page can still be found.\n */\n\nconst selectClass =\n 'w-full rounded-md border border-input bg-background px-3 py-2 text-sm disabled:opacity-60';\n\nconst PICKER_PROJECTS = gql`\n query PickerProjects($workspaceId: ID!) {\n planmagnetProjects(workspaceId: $workspaceId, pagination: { first: 100 }) {\n items {\n id\n name\n }\n totalCount\n }\n }\n`;\n\n/** A project select. '' means \"no project\" when `noneLabel` is given. `exclude` hides ids already spoken for. */\nexport function ProjectSelect({\n id,\n value,\n onChange,\n noneLabel,\n exclude = [],\n}: {\n id?: string;\n value: string;\n onChange: (projectId: string) => void;\n noneLabel?: string;\n exclude?: string[];\n}) {\n const { workspaceId } = usePlanMagnet();\n const { data, loading, error } = useQuery<{\n planmagnetProjects: { items: { id: string; name: string }[]; totalCount: number };\n }>(PICKER_PROJECTS, { variables: { workspaceId: workspaceId ?? '' }, skip: !workspaceId });\n const projects = (data?.planmagnetProjects.items ?? []).filter((p) => !exclude.includes(p.id));\n return (\n <select\n id={id}\n className={selectClass}\n value={value}\n onChange={(e) => onChange(e.target.value)}\n >\n {noneLabel !== undefined && <option value=\"\">{noneLabel}</option>}\n {projects.length === 0 && noneLabel === undefined && (\n <option value=\"\">\n {loading && !data\n ? 'Loading projects…'\n : error\n ? 'Projects could not be loaded'\n : 'No projects yet'}\n </option>\n )}\n {projects.map((p) => (\n <option key={p.id} value={p.id}>\n {p.name}\n </option>\n ))}\n </select>\n );\n}\n\nconst PICKER_WORK_ITEMS = gql`\n query PickerWorkItems($workspaceId: ID!, $filter: PlanmagnetWorkItemFilter) {\n planmagnetWorkItems(workspaceId: $workspaceId, filter: $filter, pagination: { first: 20 }) {\n items {\n id\n key\n title\n }\n totalCount\n }\n }\n`;\n\n/**\n * Search, then pick one work item. The server matches the key, title and description. `exclude` hides items that are\n * already linked (the result says how many more exist, so an empty list never claims \"nothing left\" falsely).\n */\nexport function WorkItemSearchSelect({\n id,\n projectId,\n value,\n onChange,\n exclude = [],\n}: {\n id: string;\n projectId?: string;\n value: string;\n onChange: (workItemId: string) => void;\n exclude?: string[];\n}) {\n const { workspaceId } = usePlanMagnet();\n const [search, setSearch] = useState('');\n const deferred = useDeferredValue(search.trim());\n const { data, loading } = useQuery<{\n planmagnetWorkItems: {\n items: { id: string; key: string; title: string }[];\n totalCount: number;\n };\n }>(PICKER_WORK_ITEMS, {\n variables: {\n workspaceId: workspaceId ?? '',\n filter: { ...(deferred && { search: deferred }), ...(projectId && { projectId }) },\n },\n skip: !workspaceId,\n });\n const found = data?.planmagnetWorkItems.items ?? [];\n const items = found.filter((w) => !exclude.includes(w.id));\n const total = data?.planmagnetWorkItems.totalCount ?? 0;\n return (\n <div className=\"space-y-1\">\n <Input\n aria-label=\"Search work items\"\n placeholder=\"Search by key or title\"\n value={search}\n onChange={(e) => setSearch(e.target.value)}\n />\n <select\n id={id}\n className={selectClass}\n value={value}\n onChange={(e) => onChange(e.target.value)}\n >\n <option value=\"\">\n {loading && !data ? 'Searching…' : items.length ? 'Choose a work item' : 'No match'}\n </option>\n {/* The current value stays selectable (and visible) when it is not in this page of results. */}\n {value && !items.some((w) => w.id === value) && (\n <option value={value}>Currently linked work item</option>\n )}\n {items.map((w) => (\n <option key={w.id} value={w.id}>\n {w.key} — {w.title}\n </option>\n ))}\n </select>\n {total > found.length && (\n <p className=\"text-xs text-muted-foreground\">\n Showing {found.length} of {total} — type to narrow the list.\n </p>\n )}\n </div>\n );\n}\n\nconst PICKER_DOCS = gql`\n query PickerDocs($workspaceId: String, $filter: PlanmagnetDocFilter) {\n planmagnetDocs(workspaceId: $workspaceId, filter: $filter, pagination: { first: 20 }) {\n items {\n id\n title\n }\n totalCount\n }\n }\n`;\n\n/** Search, then pick one doc. */\nexport function DocSearchSelect({\n id,\n value,\n onChange,\n exclude = [],\n}: {\n id: string;\n value: string;\n onChange: (docId: string) => void;\n exclude?: string[];\n}) {\n const { workspaceId } = usePlanMagnet();\n const [search, setSearch] = useState('');\n const deferred = useDeferredValue(search.trim());\n const { data, loading } = useQuery<{\n planmagnetDocs: { items: { id: string; title: string }[]; totalCount: number };\n }>(PICKER_DOCS, {\n variables: {\n workspaceId: workspaceId ?? '',\n filter: deferred ? { search: deferred } : undefined,\n },\n skip: !workspaceId,\n });\n const found = data?.planmagnetDocs.items ?? [];\n const docs = found.filter((d) => !exclude.includes(d.id));\n const total = data?.planmagnetDocs.totalCount ?? 0;\n return (\n <div className=\"space-y-1\">\n <Input\n aria-label=\"Search docs\"\n placeholder=\"Search docs by title\"\n value={search}\n onChange={(e) => setSearch(e.target.value)}\n />\n <select\n id={id}\n className={selectClass}\n value={value}\n onChange={(e) => onChange(e.target.value)}\n >\n <option value=\"\">\n {loading && !data ? 'Searching…' : docs.length ? 'Choose a doc' : 'No match'}\n </option>\n {docs.map((d) => (\n <option key={d.id} value={d.id}>\n {d.title}\n </option>\n ))}\n </select>\n {total > found.length && (\n <p className=\"text-xs text-muted-foreground\">\n Showing {found.length} of {total} — type to narrow the list.\n </p>\n )}\n </div>\n );\n}\n\nconst PICKER_PROGRAMS = gql`\n query PickerPrograms($workspaceId: ID!) {\n planmagnetPrograms(workspaceId: $workspaceId, pagination: { first: 100 }) {\n items {\n id\n name\n }\n totalCount\n }\n }\n`;\n\n/** A program select. '' means \"no program\" when `noneLabel` is given. */\nexport function ProgramSelect({\n id,\n value,\n onChange,\n noneLabel,\n}: {\n id?: string;\n value: string;\n onChange: (programId: string) => void;\n noneLabel?: string;\n}) {\n const { workspaceId } = usePlanMagnet();\n const { data, loading, error } = useQuery<{\n planmagnetPrograms: { items: { id: string; name: string }[]; totalCount: number };\n }>(PICKER_PROGRAMS, { variables: { workspaceId: workspaceId ?? '' }, skip: !workspaceId });\n const programs = data?.planmagnetPrograms.items ?? [];\n return (\n <select\n id={id}\n className={selectClass}\n value={value}\n onChange={(e) => onChange(e.target.value)}\n >\n {noneLabel !== undefined && <option value=\"\">{noneLabel}</option>}\n {programs.length === 0 && noneLabel === undefined && (\n <option value=\"\">\n {loading && !data\n ? 'Loading programs…'\n : error\n ? 'Programs could not be loaded'\n : 'No programs yet'}\n </option>\n )}\n {programs.map((p) => (\n <option key={p.id} value={p.id}>\n {p.name}\n </option>\n ))}\n </select>\n );\n}\n\nconst PICKER_COMPETITORS = gql`\n query PickerCompetitors($workspaceId: ID!, $filter: PlanmagnetCompetitorFilter) {\n planmagnetCompetitors(workspaceId: $workspaceId, filter: $filter, pagination: { first: 20 }) {\n items {\n id\n name\n }\n totalCount\n }\n }\n`;\n\n/** Search, then pick one competitor. `exclude` hides competitors already linked. */\nexport function CompetitorSearchSelect({\n id,\n value,\n onChange,\n exclude = [],\n}: {\n id: string;\n value: string;\n onChange: (competitorId: string) => void;\n exclude?: string[];\n}) {\n const { workspaceId } = usePlanMagnet();\n const [search, setSearch] = useState('');\n const deferred = useDeferredValue(search.trim());\n const { data, loading } = useQuery<{\n planmagnetCompetitors: { items: { id: string; name: string }[]; totalCount: number };\n }>(PICKER_COMPETITORS, {\n variables: {\n workspaceId: workspaceId ?? '',\n filter: deferred ? { search: deferred } : undefined,\n },\n skip: !workspaceId,\n });\n const found = data?.planmagnetCompetitors.items ?? [];\n const competitors = found.filter((c) => !exclude.includes(c.id));\n const total = data?.planmagnetCompetitors.totalCount ?? 0;\n return (\n <div className=\"space-y-1\">\n <Input\n aria-label=\"Search competitors\"\n placeholder=\"Search competitors by name\"\n value={search}\n onChange={(e) => setSearch(e.target.value)}\n />\n <select\n id={id}\n className={selectClass}\n value={value}\n onChange={(e) => onChange(e.target.value)}\n >\n <option value=\"\">\n {loading && !data\n ? 'Searching…'\n : competitors.length\n ? 'Choose a competitor'\n : 'No match'}\n </option>\n {competitors.map((c) => (\n <option key={c.id} value={c.id}>\n {c.name}\n </option>\n ))}\n </select>\n {total > found.length && (\n <p className=\"text-xs text-muted-foreground\">\n Showing {found.length} of {total} — type to narrow the list.\n </p>\n )}\n </div>\n );\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Pickers.js","names":[],"sources":["../../../src/planmagnet/controls/Pickers.tsx"],"sourcesContent":["import { useDeferredValue, useState } from 'react';\nimport { gql } from '@apollo/client';\nimport { useQuery } from '@apollo/client/react';\nimport { Input } from '@burdenoff/fe-libs/ui';\nimport { usePlanMagnet } from '../providers/PlanMagnetProvider';\n\n/**\n * Record pickers shared by forms and dialogs: a project select, and search-then-pick selects for work items and\n * docs. Values are record ids. Search runs on the server (never \"the first page, filtered in the browser\"), so a\n * record past the first page can still be found.\n */\n\nconst selectClass =\n 'w-full rounded-md border border-input bg-background px-3 py-2 text-sm disabled:opacity-60';\n\nconst PICKER_PROJECTS = gql`\n query PickerProjects($workspaceId: ID!) {\n planmagnetProjects(workspaceId: $workspaceId, pagination: { first: 100 }) {\n items {\n id\n name\n }\n totalCount\n }\n }\n`;\n\n/** A project select. '' means \"no project\" when `noneLabel` is given. `exclude` hides ids already spoken for. */\nexport function ProjectSelect({\n id,\n value,\n onChange,\n noneLabel,\n exclude = [],\n}: {\n id?: string;\n value: string;\n onChange: (projectId: string) => void;\n noneLabel?: string;\n exclude?: string[];\n}) {\n const { workspaceId } = usePlanMagnet();\n const { data, loading, error } = useQuery<{\n planmagnetProjects: { items: { id: string; name: string }[]; totalCount: number };\n }>(PICKER_PROJECTS, { variables: { workspaceId: workspaceId ?? '' }, skip: !workspaceId });\n const projects = (data?.planmagnetProjects.items ?? []).filter((p) => !exclude.includes(p.id));\n return (\n <select\n id={id}\n className={selectClass}\n value={value}\n onChange={(e) => onChange(e.target.value)}\n >\n {noneLabel !== undefined && <option value=\"\">{noneLabel}</option>}\n {projects.length === 0 && noneLabel === undefined && (\n <option value=\"\">\n {loading && !data\n ? 'Loading projects…'\n : error\n ? 'Projects could not be loaded'\n : 'No projects yet'}\n </option>\n )}\n {projects.map((p) => (\n <option key={p.id} value={p.id}>\n {p.name}\n </option>\n ))}\n </select>\n );\n}\n\nconst PICKER_TEAMS = gql`\n query PickerTeams($workspaceId: ID!) {\n planmagnetTeams(workspaceId: $workspaceId, pagination: { first: 100 }) {\n items {\n id\n name\n }\n totalCount\n }\n }\n`;\n\n/** A team select (BOFF-8044). '' means \"no team\" when `noneLabel` is given. */\nexport function TeamSelect({\n id,\n value,\n onChange,\n noneLabel,\n}: {\n id?: string;\n value: string;\n onChange: (teamId: string) => void;\n noneLabel?: string;\n}) {\n const { workspaceId } = usePlanMagnet();\n const { data, loading, error } = useQuery<{\n planmagnetTeams: { items: { id: string; name: string }[]; totalCount: number };\n }>(PICKER_TEAMS, { variables: { workspaceId: workspaceId ?? '' }, skip: !workspaceId });\n const teams = data?.planmagnetTeams.items ?? [];\n return (\n <select\n id={id}\n aria-label={id ? undefined : 'Team'}\n className={selectClass}\n value={value}\n onChange={(e) => onChange(e.target.value)}\n >\n {noneLabel !== undefined && <option value=\"\">{noneLabel}</option>}\n {teams.length === 0 && noneLabel === undefined && (\n <option value=\"\">\n {loading && !data\n ? 'Loading teams…'\n : error\n ? 'Teams could not be loaded'\n : 'No teams yet'}\n </option>\n )}\n {teams.map((t) => (\n <option key={t.id} value={t.id}>\n {t.name}\n </option>\n ))}\n </select>\n );\n}\n\nconst PICKER_WORK_ITEMS = gql`\n query PickerWorkItems($workspaceId: ID!, $filter: PlanmagnetWorkItemFilter) {\n planmagnetWorkItems(workspaceId: $workspaceId, filter: $filter, pagination: { first: 20 }) {\n items {\n id\n key\n title\n }\n totalCount\n }\n }\n`;\n\n/**\n * Search, then pick one work item. The server matches the key, title and description. `exclude` hides items that are\n * already linked (the result says how many more exist, so an empty list never claims \"nothing left\" falsely).\n */\nexport function WorkItemSearchSelect({\n id,\n projectId,\n value,\n onChange,\n exclude = [],\n}: {\n id: string;\n projectId?: string;\n value: string;\n onChange: (workItemId: string) => void;\n exclude?: string[];\n}) {\n const { workspaceId } = usePlanMagnet();\n const [search, setSearch] = useState('');\n const deferred = useDeferredValue(search.trim());\n const { data, loading } = useQuery<{\n planmagnetWorkItems: {\n items: { id: string; key: string; title: string }[];\n totalCount: number;\n };\n }>(PICKER_WORK_ITEMS, {\n variables: {\n workspaceId: workspaceId ?? '',\n filter: { ...(deferred && { search: deferred }), ...(projectId && { projectId }) },\n },\n skip: !workspaceId,\n });\n const found = data?.planmagnetWorkItems.items ?? [];\n const items = found.filter((w) => !exclude.includes(w.id));\n const total = data?.planmagnetWorkItems.totalCount ?? 0;\n return (\n <div className=\"space-y-1\">\n <Input\n aria-label=\"Search work items\"\n placeholder=\"Search by key or title\"\n value={search}\n onChange={(e) => setSearch(e.target.value)}\n />\n <select\n id={id}\n className={selectClass}\n value={value}\n onChange={(e) => onChange(e.target.value)}\n >\n <option value=\"\">\n {loading && !data ? 'Searching…' : items.length ? 'Choose a work item' : 'No match'}\n </option>\n {/* The current value stays selectable (and visible) when it is not in this page of results. */}\n {value && !items.some((w) => w.id === value) && (\n <option value={value}>Currently linked work item</option>\n )}\n {items.map((w) => (\n <option key={w.id} value={w.id}>\n {w.key} — {w.title}\n </option>\n ))}\n </select>\n {total > found.length && (\n <p className=\"text-xs text-muted-foreground\">\n Showing {found.length} of {total} — type to narrow the list.\n </p>\n )}\n </div>\n );\n}\n\nconst PICKER_DOCS = gql`\n query PickerDocs($workspaceId: String, $filter: PlanmagnetDocFilter) {\n planmagnetDocs(workspaceId: $workspaceId, filter: $filter, pagination: { first: 20 }) {\n items {\n id\n title\n }\n totalCount\n }\n }\n`;\n\n/** Search, then pick one doc. */\nexport function DocSearchSelect({\n id,\n value,\n onChange,\n exclude = [],\n}: {\n id: string;\n value: string;\n onChange: (docId: string) => void;\n exclude?: string[];\n}) {\n const { workspaceId } = usePlanMagnet();\n const [search, setSearch] = useState('');\n const deferred = useDeferredValue(search.trim());\n const { data, loading } = useQuery<{\n planmagnetDocs: { items: { id: string; title: string }[]; totalCount: number };\n }>(PICKER_DOCS, {\n variables: {\n workspaceId: workspaceId ?? '',\n filter: deferred ? { search: deferred } : undefined,\n },\n skip: !workspaceId,\n });\n const found = data?.planmagnetDocs.items ?? [];\n const docs = found.filter((d) => !exclude.includes(d.id));\n const total = data?.planmagnetDocs.totalCount ?? 0;\n return (\n <div className=\"space-y-1\">\n <Input\n aria-label=\"Search docs\"\n placeholder=\"Search docs by title\"\n value={search}\n onChange={(e) => setSearch(e.target.value)}\n />\n <select\n id={id}\n className={selectClass}\n value={value}\n onChange={(e) => onChange(e.target.value)}\n >\n <option value=\"\">\n {loading && !data ? 'Searching…' : docs.length ? 'Choose a doc' : 'No match'}\n </option>\n {docs.map((d) => (\n <option key={d.id} value={d.id}>\n {d.title}\n </option>\n ))}\n </select>\n {total > found.length && (\n <p className=\"text-xs text-muted-foreground\">\n Showing {found.length} of {total} — type to narrow the list.\n </p>\n )}\n </div>\n );\n}\n\nconst PICKER_PROGRAMS = gql`\n query PickerPrograms($workspaceId: ID!) {\n planmagnetPrograms(workspaceId: $workspaceId, pagination: { first: 100 }) {\n items {\n id\n name\n }\n totalCount\n }\n }\n`;\n\n/** A program select. '' means \"no program\" when `noneLabel` is given. */\nexport function ProgramSelect({\n id,\n value,\n onChange,\n noneLabel,\n}: {\n id?: string;\n value: string;\n onChange: (programId: string) => void;\n noneLabel?: string;\n}) {\n const { workspaceId } = usePlanMagnet();\n const { data, loading, error } = useQuery<{\n planmagnetPrograms: { items: { id: string; name: string }[]; totalCount: number };\n }>(PICKER_PROGRAMS, { variables: { workspaceId: workspaceId ?? '' }, skip: !workspaceId });\n const programs = data?.planmagnetPrograms.items ?? [];\n return (\n <select\n id={id}\n className={selectClass}\n value={value}\n onChange={(e) => onChange(e.target.value)}\n >\n {noneLabel !== undefined && <option value=\"\">{noneLabel}</option>}\n {programs.length === 0 && noneLabel === undefined && (\n <option value=\"\">\n {loading && !data\n ? 'Loading programs…'\n : error\n ? 'Programs could not be loaded'\n : 'No programs yet'}\n </option>\n )}\n {programs.map((p) => (\n <option key={p.id} value={p.id}>\n {p.name}\n </option>\n ))}\n </select>\n );\n}\n\nconst PICKER_PORTFOLIOS = gql`\n query PickerPortfolios($workspaceId: ID!) {\n planmagnetPortfolios(workspaceId: $workspaceId, pagination: { first: 100 }) {\n items {\n id\n name\n }\n totalCount\n }\n }\n`;\n\n/** A portfolio select (BOFF-8047). '' means \"no portfolio\" when `noneLabel` is given. */\nexport function PortfolioSelect({\n id,\n value,\n onChange,\n noneLabel,\n}: {\n id?: string;\n value: string;\n onChange: (portfolioId: string) => void;\n noneLabel?: string;\n}) {\n const { workspaceId } = usePlanMagnet();\n const { data, loading, error } = useQuery<{\n planmagnetPortfolios: { items: { id: string; name: string }[]; totalCount: number };\n }>(PICKER_PORTFOLIOS, { variables: { workspaceId: workspaceId ?? '' }, skip: !workspaceId });\n const portfolios = data?.planmagnetPortfolios.items ?? [];\n return (\n <select\n id={id}\n className={selectClass}\n value={value}\n onChange={(e) => onChange(e.target.value)}\n >\n {noneLabel !== undefined && <option value=\"\">{noneLabel}</option>}\n {portfolios.length === 0 && noneLabel === undefined && (\n <option value=\"\">\n {loading && !data\n ? 'Loading portfolios…'\n : error\n ? 'Portfolios could not be loaded'\n : 'No portfolios yet'}\n </option>\n )}\n {portfolios.map((p) => (\n <option key={p.id} value={p.id}>\n {p.name}\n </option>\n ))}\n </select>\n );\n}\n\nconst PICKER_COMPETITORS = gql`\n query PickerCompetitors($workspaceId: ID!, $filter: PlanmagnetCompetitorFilter) {\n planmagnetCompetitors(workspaceId: $workspaceId, filter: $filter, pagination: { first: 20 }) {\n items {\n id\n name\n }\n totalCount\n }\n }\n`;\n\n/** Search, then pick one competitor. `exclude` hides competitors already linked. */\nexport function CompetitorSearchSelect({\n id,\n value,\n onChange,\n exclude = [],\n}: {\n id: string;\n value: string;\n onChange: (competitorId: string) => void;\n exclude?: string[];\n}) {\n const { workspaceId } = usePlanMagnet();\n const [search, setSearch] = useState('');\n const deferred = useDeferredValue(search.trim());\n const { data, loading } = useQuery<{\n planmagnetCompetitors: { items: { id: string; name: string }[]; totalCount: number };\n }>(PICKER_COMPETITORS, {\n variables: {\n workspaceId: workspaceId ?? '',\n filter: deferred ? { search: deferred } : undefined,\n },\n skip: !workspaceId,\n });\n const found = data?.planmagnetCompetitors.items ?? [];\n const competitors = found.filter((c) => !exclude.includes(c.id));\n const total = data?.planmagnetCompetitors.totalCount ?? 0;\n return (\n <div className=\"space-y-1\">\n <Input\n aria-label=\"Search competitors\"\n placeholder=\"Search competitors by name\"\n value={search}\n onChange={(e) => setSearch(e.target.value)}\n />\n <select\n id={id}\n className={selectClass}\n value={value}\n onChange={(e) => onChange(e.target.value)}\n >\n <option value=\"\">\n {loading && !data\n ? 'Searching…'\n : competitors.length\n ? 'Choose a competitor'\n : 'No match'}\n </option>\n {competitors.map((c) => (\n <option key={c.id} value={c.id}>\n {c.name}\n </option>\n ))}\n </select>\n {total > found.length && (\n <p className=\"text-xs text-muted-foreground\">\n Showing {found.length} of {total} — type to narrow the list.\n </p>\n )}\n </div>\n );\n}\n"],"mappings":"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"}
|
|
@@ -41,12 +41,16 @@ export declare function useAssigneeOptions(currentId: string | null | undefined)
|
|
|
41
41
|
hasMore: boolean;
|
|
42
42
|
fetchMore: () => void;
|
|
43
43
|
};
|
|
44
|
-
/** A plain
|
|
45
|
-
export declare function AssigneeSelect({ id, value, onChange, disabled, }: {
|
|
44
|
+
/** A plain workspace-member select (for forms). '' means `noneLabel` ("Unassigned" by default). */
|
|
45
|
+
export declare function AssigneeSelect({ id, value, onChange, disabled, noneLabel, ariaLabel, }: {
|
|
46
46
|
id?: string;
|
|
47
47
|
value: string;
|
|
48
48
|
onChange: (userId: string) => void;
|
|
49
49
|
disabled?: boolean;
|
|
50
|
+
/** BOFF-8044: e.g. "No lead" when reused for a Team's leadId, which isn't an "assignee". */
|
|
51
|
+
noneLabel?: string;
|
|
52
|
+
/** The control's accessible name when it has no visible `<label>` (i.e. no `id`). */
|
|
53
|
+
ariaLabel?: string;
|
|
50
54
|
}): import("react/jsx-runtime").JSX.Element;
|
|
51
55
|
/** The task detail's assignee control: saves on change. */
|
|
52
56
|
export declare function WorkItemAssigneeSelect({ workItemId, assigneeId, }: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WorkItemControls.d.ts","sourceRoot":"","sources":["../../../src/planmagnet/controls/WorkItemControls.tsx"],"names":[],"mappings":"AAYA;;;;;;;;GAQG;AAEH,eAAO,MAAM,kBAAkB,0FAQrB,CAAC;AACX,eAAO,MAAM,oBAAoB,wDAAyD,CAAC;AAE3F,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAG/C;AA0CD,wDAAwD;AACxD,wBAAgB,kBAAkB,CAAC,EACjC,UAAU,EACV,KAAK,EACL,KAAK,EACL,OAAO,EACP,KAAK,GACN,EAAE;IACD,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,QAAQ,GAAG,UAAU,CAAC;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;IAC3B,KAAK,EAAE,MAAM,CAAC;CACf,2CAyBA;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,EACnC,UAAU,EACV,SAAS,EACT,KAAK,GACN,EAAE;IACD,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;CACf,2CA8BA;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS;;;;;;;;EAmBtE;AAED,
|
|
1
|
+
{"version":3,"file":"WorkItemControls.d.ts","sourceRoot":"","sources":["../../../src/planmagnet/controls/WorkItemControls.tsx"],"names":[],"mappings":"AAYA;;;;;;;;GAQG;AAEH,eAAO,MAAM,kBAAkB,0FAQrB,CAAC;AACX,eAAO,MAAM,oBAAoB,wDAAyD,CAAC;AAE3F,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAG/C;AA0CD,wDAAwD;AACxD,wBAAgB,kBAAkB,CAAC,EACjC,UAAU,EACV,KAAK,EACL,KAAK,EACL,OAAO,EACP,KAAK,GACN,EAAE;IACD,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,QAAQ,GAAG,UAAU,CAAC;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;IAC3B,KAAK,EAAE,MAAM,CAAC;CACf,2CAyBA;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,EACnC,UAAU,EACV,SAAS,EACT,KAAK,GACN,EAAE;IACD,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;CACf,2CA8BA;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS;;;;;;;;EAmBtE;AAED,mGAAmG;AACnG,wBAAgB,cAAc,CAAC,EAC7B,EAAE,EACF,KAAK,EACL,QAAQ,EACR,QAAgB,EAChB,SAAwB,EACxB,SAAsB,GACvB,EAAE;IACD,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,4FAA4F;IAC5F,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,qFAAqF;IACrF,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,2CAkCA;AAED,2DAA2D;AAC3D,wBAAgB,sBAAsB,CAAC,EACrC,UAAU,EACV,UAAU,GACX,EAAE;IACD,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B,2CAcA;AAED,kDAAkD;AAClD,wBAAgB,qBAAqB,CAAC,EACpC,UAAU,EACV,KAAK,GACN,EAAE;IACD,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;CACf,2CA6CA"}
|
|
@@ -140,14 +140,14 @@ function A(t) {
|
|
|
140
140
|
fetchMore: o.fetchMore
|
|
141
141
|
};
|
|
142
142
|
}
|
|
143
|
-
function j({ id: e, value: t, onChange: n, disabled: r = !1 }) {
|
|
144
|
-
let { options:
|
|
143
|
+
function j({ id: e, value: t, onChange: n, disabled: r = !1, noneLabel: i = "Unassigned", ariaLabel: a = "Assignee" }) {
|
|
144
|
+
let { options: o, loading: s, hasMore: c, fetchMore: l } = A(t || null);
|
|
145
145
|
return /* @__PURE__ */ g("div", {
|
|
146
146
|
className: "flex flex-col gap-1",
|
|
147
147
|
children: [
|
|
148
148
|
/* @__PURE__ */ g("select", {
|
|
149
149
|
id: e,
|
|
150
|
-
"aria-label": e ? void 0 :
|
|
150
|
+
"aria-label": e ? void 0 : a,
|
|
151
151
|
"data-testid": "assignee-select",
|
|
152
152
|
className: E,
|
|
153
153
|
value: t,
|
|
@@ -155,20 +155,20 @@ function j({ id: e, value: t, onChange: n, disabled: r = !1 }) {
|
|
|
155
155
|
onChange: (e) => n(e.target.value),
|
|
156
156
|
children: [/* @__PURE__ */ h("option", {
|
|
157
157
|
value: "",
|
|
158
|
-
children:
|
|
159
|
-
}),
|
|
158
|
+
children: i
|
|
159
|
+
}), o.map((e) => /* @__PURE__ */ h("option", {
|
|
160
160
|
value: e.id,
|
|
161
161
|
children: e.name
|
|
162
162
|
}, e.id))]
|
|
163
163
|
}),
|
|
164
|
-
|
|
164
|
+
s && o.length === 0 && /* @__PURE__ */ h("span", {
|
|
165
165
|
className: "text-xs text-muted-foreground",
|
|
166
166
|
children: "Loading members…"
|
|
167
167
|
}),
|
|
168
|
-
|
|
168
|
+
c && /* @__PURE__ */ h("button", {
|
|
169
169
|
type: "button",
|
|
170
170
|
className: "self-start text-xs text-primary hover:underline",
|
|
171
|
-
onClick:
|
|
171
|
+
onClick: l,
|
|
172
172
|
children: "Show more members"
|
|
173
173
|
})
|
|
174
174
|
]
|