@burdenoff/microfe-crewfoundry 2026.827.1 → 2026.830.1
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/crewfoundry/CrewFoundryRoot.d.ts.map +1 -1
- package/dist/crewfoundry/CrewFoundryRoot.js +190 -185
- package/dist/crewfoundry/CrewFoundryRoot.js.map +1 -1
- package/dist/crewfoundry/components/forms/ConfirmDialog.d.ts.map +1 -1
- package/dist/crewfoundry/components/forms/ConfirmDialog.js +25 -24
- package/dist/crewfoundry/components/forms/ConfirmDialog.js.map +1 -1
- package/dist/crewfoundry/components/forms/FormModal.d.ts.map +1 -1
- package/dist/crewfoundry/components/forms/FormModal.js +103 -101
- package/dist/crewfoundry/components/forms/FormModal.js.map +1 -1
- package/dist/crewfoundry/pages/DashboardDashboardPagePage.d.ts.map +1 -1
- package/dist/crewfoundry/pages/DashboardDashboardPagePage.js +207 -210
- package/dist/crewfoundry/pages/DashboardDashboardPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/HiringJobsPagePage.d.ts.map +1 -1
- package/dist/crewfoundry/pages/HiringJobsPagePage.js +75 -78
- package/dist/crewfoundry/pages/HiringJobsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/MarketplaceMarketplacePagePage.d.ts.map +1 -1
- package/dist/crewfoundry/pages/MarketplaceMarketplacePagePage.js +101 -104
- package/dist/crewfoundry/pages/MarketplaceMarketplacePagePage.js.map +1 -1
- package/dist/crewfoundry/pages/ProjectsProjectsPagePage.d.ts.map +1 -1
- package/dist/crewfoundry/pages/ProjectsProjectsPagePage.js +95 -98
- package/dist/crewfoundry/pages/ProjectsProjectsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/TeamsTeamsPagePage.d.ts.map +1 -1
- package/dist/crewfoundry/pages/TeamsTeamsPagePage.js +101 -104
- package/dist/crewfoundry/pages/TeamsTeamsPagePage.js.map +1 -1
- package/dist/shared/hooks/useTr.d.ts +17 -0
- package/dist/shared/hooks/useTr.d.ts.map +1 -0
- package/dist/shared/hooks/useTr.js +14 -0
- package/dist/shared/hooks/useTr.js.map +1 -0
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CrewFoundryRoot.js","names":[],"sources":["../../src/crewfoundry/CrewFoundryRoot.tsx"],"sourcesContent":["import type { FC } from 'react';\nimport { useEffect } from 'react';\nimport { FileText, Folder, LayoutDashboard } from 'lucide-react';\nimport { CrewFoundryProvider } from './providers/CrewFoundryProvider';\nimport { FeatureFlagProvider } from '@burdenoff/fe-libs/shared/feature-flags';\nimport type { CrewFoundryRootProps, NavItem } from './types';\nimport { CrewFoundryRoutes } from './CrewFoundryRoutes';\nimport { useCrewFoundryStore } from './store/crewfoundryStore';\nimport { joinPath } from './utils/navigation';\n\ntype NavLeaf = {\n id: string;\n label: string;\n path: string;\n};\n\ntype NavSection = {\n id: string;\n label: string;\n path: string;\n children: NavLeaf[];\n};\n\nconst buildSections = (basePath: string): NavSection[] => [\n {\n id: 'crewfoundry-dashboard',\n label: 'Dashboard',\n path: joinPath(basePath, 'dashboard/dashboard-page'),\n children: [\n {\n id: 'crewfoundry-dashboard-overview',\n label: 'Overview',\n path: joinPath(basePath, 'dashboard/dashboard-page'),\n },\n {\n id: 'crewfoundry-dashboard-analytics',\n label: 'Analytics',\n path: joinPath(basePath, 'dashboard/analytics-page'),\n },\n {\n id: 'crewfoundry-dashboard-enhanced',\n label: 'Enhanced Dashboard',\n path: joinPath(basePath, 'dashboard/enhanced-dashboard-page'),\n },\n {\n id: 'crewfoundry-dashboard-executive',\n label: 'Executive Dashboard',\n path: joinPath(basePath, 'dashboard/executive-dashboard'),\n },\n ],\n },\n {\n id: 'crewfoundry-hiring',\n label: 'Hiring',\n path: joinPath(basePath, 'hiring/jobs-page'),\n children: [\n {\n id: 'crewfoundry-hiring-jobs',\n label: 'Jobs',\n path: joinPath(basePath, 'hiring/jobs-page'),\n },\n {\n id: 'crewfoundry-hiring-applications',\n label: 'Applications',\n path: joinPath(basePath, 'hiring/applications-page'),\n },\n {\n id: 'crewfoundry-hiring-candidates',\n label: 'Candidates',\n path: joinPath(basePath, 'hiring/candidates-page'),\n },\n {\n id: 'crewfoundry-hiring-interviews',\n label: 'Interviews',\n path: joinPath(basePath, 'hiring/interviews-page'),\n },\n {\n id: 'crewfoundry-hiring-create-job',\n label: 'Create Job',\n path: joinPath(basePath, 'hiring/create-job-page'),\n },\n {\n id: 'crewfoundry-hiring-job-details',\n label: 'Job Details',\n path: joinPath(basePath, 'hiring/job-details-page'),\n },\n ],\n },\n {\n id: 'crewfoundry-hr',\n label: 'HR',\n path: joinPath(basePath, 'hr/employees-page'),\n children: [\n {\n id: 'crewfoundry-hr-employees',\n label: 'Employees',\n path: joinPath(basePath, 'hr/employees-page'),\n },\n {\n id: 'crewfoundry-hr-departments',\n label: 'Departments',\n path: joinPath(basePath, 'hr/departments-page'),\n },\n {\n id: 'crewfoundry-hr-payroll',\n label: 'Payroll',\n path: joinPath(basePath, 'hr/payroll-page'),\n },\n {\n id: 'crewfoundry-hr-leave',\n label: 'Leave Management',\n path: joinPath(basePath, 'hr/leave-management-page'),\n },\n {\n id: 'crewfoundry-hr-time',\n label: 'Time Tracking',\n path: joinPath(basePath, 'hr/time-tracking-page'),\n },\n ],\n },\n {\n id: 'crewfoundry-learning',\n label: 'Learning',\n path: joinPath(basePath, 'learning/courses-page'),\n children: [\n {\n id: 'crewfoundry-learning-courses',\n label: 'Courses',\n path: joinPath(basePath, 'learning/courses-page'),\n },\n {\n id: 'crewfoundry-learning-paths',\n label: 'Learning Paths',\n path: joinPath(basePath, 'learning/learning-paths-page'),\n },\n {\n id: 'crewfoundry-learning-certificates',\n label: 'Certificates',\n path: joinPath(basePath, 'learning/certificates-page'),\n },\n {\n id: 'crewfoundry-learning-assessments',\n label: 'Assessments',\n path: joinPath(basePath, 'learning/assessments-page'),\n },\n {\n id: 'crewfoundry-learning-my-learning',\n label: 'My Learning',\n path: joinPath(basePath, 'learning/my-learning-page'),\n },\n {\n id: 'crewfoundry-learning-analytics',\n label: 'Learning Analytics',\n path: joinPath(basePath, 'learning/learning-analytics-page'),\n },\n {\n id: 'crewfoundry-learning-course-details',\n label: 'Course Details',\n path: joinPath(basePath, 'learning/course-details-page'),\n },\n {\n id: 'crewfoundry-learning-course-player',\n label: 'Course Learning',\n path: joinPath(basePath, 'learning/course-learning-page'),\n },\n {\n id: 'crewfoundry-learning-path-detail',\n label: 'Path Detail',\n path: joinPath(basePath, 'learning/learning-path-detail-page'),\n },\n ],\n },\n {\n id: 'crewfoundry-teams',\n label: 'Teams',\n path: joinPath(basePath, 'teams/teams-page'),\n children: [\n {\n id: 'crewfoundry-teams-list',\n label: 'Teams',\n path: joinPath(basePath, 'teams/teams-page'),\n },\n {\n id: 'crewfoundry-teams-directory',\n label: 'Directory',\n path: joinPath(basePath, 'teams/team-directory-page'),\n },\n {\n id: 'crewfoundry-teams-detail',\n label: 'Team Detail',\n path: joinPath(basePath, 'teams/team-detail-page'),\n },\n {\n id: 'crewfoundry-teams-analytics',\n label: 'Team Analytics',\n path: joinPath(basePath, 'teams/team-analytics-page'),\n },\n {\n id: 'crewfoundry-teams-settings',\n label: 'Team Settings',\n path: joinPath(basePath, 'teams/team-settings-page'),\n },\n ],\n },\n {\n id: 'crewfoundry-marketplace',\n label: 'Marketplace',\n path: joinPath(basePath, 'marketplace/marketplace-page'),\n children: [\n {\n id: 'crewfoundry-marketplace-browse',\n label: 'Marketplace',\n path: joinPath(basePath, 'marketplace/marketplace-page'),\n },\n {\n id: 'crewfoundry-marketplace-services',\n label: 'Services',\n path: joinPath(basePath, 'marketplace/marketplace-services-page'),\n },\n {\n id: 'crewfoundry-marketplace-my-services',\n label: 'My Services',\n path: joinPath(basePath, 'marketplace/my-services-page'),\n },\n {\n id: 'crewfoundry-marketplace-project-details',\n label: 'Project Details',\n path: joinPath(basePath, 'marketplace/project-details-page'),\n },\n {\n id: 'crewfoundry-marketplace-service-details',\n label: 'Service Details',\n path: joinPath(basePath, 'marketplace/service-details-page'),\n },\n {\n id: 'crewfoundry-marketplace-messaging',\n label: 'Messaging',\n path: joinPath(basePath, 'marketplace/messaging-page'),\n },\n {\n id: 'crewfoundry-marketplace-earnings',\n label: 'Earnings',\n path: joinPath(basePath, 'marketplace/earnings-page'),\n },\n {\n id: 'crewfoundry-marketplace-bookings',\n label: 'Booking Management',\n path: joinPath(basePath, 'marketplace/booking-management-page'),\n },\n {\n id: 'crewfoundry-marketplace-freelancer-profile',\n label: 'Freelancer Profile',\n path: joinPath(basePath, 'marketplace/freelancer-profile-page'),\n },\n {\n id: 'crewfoundry-marketplace-freelancer-profile-enhanced',\n label: 'Freelancer Profile Enhanced',\n path: joinPath(basePath, 'marketplace/freelancer-profile-page-enhanced'),\n },\n ],\n },\n {\n id: 'crewfoundry-payments',\n label: 'Payments',\n path: joinPath(basePath, 'payments/payment-dashboard-page'),\n children: [\n {\n id: 'crewfoundry-payments-dashboard',\n label: 'Payment Dashboard',\n path: joinPath(basePath, 'payments/payment-dashboard-page'),\n },\n {\n id: 'crewfoundry-payments-invoices',\n label: 'Invoices',\n path: joinPath(basePath, 'payments/invoices-page'),\n },\n {\n id: 'crewfoundry-payments-escrow',\n label: 'Escrow',\n path: joinPath(basePath, 'payments/escrow-page'),\n },\n {\n id: 'crewfoundry-payments-methods',\n label: 'Payment Methods',\n path: joinPath(basePath, 'payments/payment-methods-page'),\n },\n {\n id: 'crewfoundry-payments-security',\n label: 'Security',\n path: joinPath(basePath, 'payments/security-page'),\n },\n ],\n },\n {\n id: 'crewfoundry-communications',\n label: 'Communications',\n path: joinPath(basePath, 'communications/announcements-page'),\n children: [\n {\n id: 'crewfoundry-communications-announcements',\n label: 'Announcements',\n path: joinPath(basePath, 'communications/announcements-page'),\n },\n {\n id: 'crewfoundry-communications-messages',\n label: 'Messages',\n path: joinPath(basePath, 'communications/messages-page'),\n },\n {\n id: 'crewfoundry-communications-calls',\n label: 'Calls',\n path: joinPath(basePath, 'communications/calls-page'),\n },\n {\n id: 'crewfoundry-communications-video-calls',\n label: 'Video Calls',\n path: joinPath(basePath, 'communications/video-calls-page'),\n },\n {\n id: 'crewfoundry-communications-files',\n label: 'Files',\n path: joinPath(basePath, 'communications/files-page'),\n },\n {\n id: 'crewfoundry-communications-directory',\n label: 'Directory',\n path: joinPath(basePath, 'communications/directory-page'),\n },\n {\n id: 'crewfoundry-communications-teams',\n label: 'Teams',\n path: joinPath(basePath, 'communications/teams-page'),\n },\n ],\n },\n {\n id: 'crewfoundry-projects',\n label: 'Projects',\n path: joinPath(basePath, 'projects/projects-page'),\n children: [\n {\n id: 'crewfoundry-projects-list',\n label: 'Projects',\n path: joinPath(basePath, 'projects/projects-page'),\n },\n {\n id: 'crewfoundry-projects-create',\n label: 'Create Project',\n path: joinPath(basePath, 'projects/create-project-page'),\n },\n {\n id: 'crewfoundry-projects-details',\n label: 'Project Details',\n path: joinPath(basePath, 'projects/project-details-page'),\n },\n ],\n },\n {\n id: 'crewfoundry-company',\n label: 'Company',\n path: joinPath(basePath, 'company/company-dashboard-page'),\n children: [\n {\n id: 'crewfoundry-company-dashboard',\n label: 'Company Dashboard',\n path: joinPath(basePath, 'company/company-dashboard-page'),\n },\n {\n id: 'crewfoundry-company-clients',\n label: 'Client Management',\n path: joinPath(basePath, 'company/client-management-page'),\n },\n {\n id: 'crewfoundry-company-vendors',\n label: 'Vendor Management',\n path: joinPath(basePath, 'company/vendor-management-page'),\n },\n {\n id: 'crewfoundry-company-profile',\n label: 'Company Profile',\n path: joinPath(basePath, 'company/company-profile-page'),\n },\n ],\n },\n {\n id: 'crewfoundry-analytics',\n label: 'Analytics',\n path: joinPath(basePath, 'analytics/analytics-page'),\n children: [\n {\n id: 'crewfoundry-analytics-overview',\n label: 'Overview',\n path: joinPath(basePath, 'analytics/analytics-page'),\n },\n {\n id: 'crewfoundry-analytics-employee',\n label: 'Employee Analytics',\n path: joinPath(basePath, 'analytics/employee-analytics-page'),\n },\n {\n id: 'crewfoundry-analytics-financial',\n label: 'Financial Analytics',\n path: joinPath(basePath, 'analytics/financial-analytics-page'),\n },\n {\n id: 'crewfoundry-analytics-hiring',\n label: 'Hiring Analytics',\n path: joinPath(basePath, 'analytics/hiring-analytics-page'),\n },\n ],\n },\n {\n id: 'crewfoundry-help',\n label: 'Help',\n path: joinPath(basePath, 'help/api-documentation-page'),\n children: [\n {\n id: 'crewfoundry-help-api',\n label: 'API Documentation',\n path: joinPath(basePath, 'help/api-documentation-page'),\n },\n ],\n },\n];\n\nexport const CrewFoundryRoot: FC<CrewFoundryRootProps> = (props) => {\n const { registerNavItems, registerFooterItems, basePath = '/' } = props;\n const initializeData = useCrewFoundryStore((state) => state.initializeData);\n\n useEffect(() => {\n void initializeData({\n workspaceId: props.workspaceId,\n authToken: props.authToken,\n apiGatewayUrl: props.apiGatewayUrl,\n actorId: props.currentUser?.id,\n });\n }, [\n initializeData,\n props.workspaceId,\n props.authToken,\n props.apiGatewayUrl,\n props.currentUser?.id,\n ]);\n\n useEffect(() => {\n if (!registerNavItems) {\n return;\n }\n\n const navItem: NavItem = {\n id: 'crewfoundry',\n label: 'CrewFoundry',\n path: basePath,\n icon: <LayoutDashboard size={20} />,\n order: 80,\n group: 'products',\n children: buildSections(basePath).map((section) => ({\n id: section.id,\n label: section.label,\n path: section.path,\n icon: <Folder size={16} />,\n children: section.children.map((child) => ({\n id: child.id,\n label: child.label,\n path: child.path,\n icon: <FileText size={16} />,\n })),\n })),\n };\n\n return registerNavItems(navItem);\n }, [registerNavItems, basePath]);\n\n useEffect(() => {\n if (!registerFooterItems) {\n return;\n }\n\n return registerFooterItems([\n {\n id: 'crewfoundry-status',\n label: 'CrewFoundry Ready',\n type: 'status',\n section: 'left',\n order: 10,\n },\n ]);\n }, [registerFooterItems]);\n\n return (\n <FeatureFlagProvider workspaceId={null} gateway=\"global\" defaultEnabled={true}>\n <CrewFoundryProvider {...props}>\n <CrewFoundryRoutes />\n </CrewFoundryProvider>\n </FeatureFlagProvider>\n );\n};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"CrewFoundryRoot.js","names":[],"sources":["../../src/crewfoundry/CrewFoundryRoot.tsx"],"sourcesContent":["import type { FC } from 'react';\nimport { useEffect } from 'react';\nimport { FileText, Folder, LayoutDashboard } from 'lucide-react';\nimport { CrewFoundryProvider } from './providers/CrewFoundryProvider';\nimport { FeatureFlagProvider } from '@burdenoff/fe-libs/shared/feature-flags';\nimport type { CrewFoundryRootProps, NavItem } from './types';\nimport { CrewFoundryRoutes } from './CrewFoundryRoutes';\nimport { useCrewFoundryStore } from './store/crewfoundryStore';\nimport { useTr } from '../shared/hooks/useTr';\nimport { joinPath } from './utils/navigation';\n\ntype NavLeaf = {\n id: string;\n label: string;\n path: string;\n};\n\ntype NavSection = {\n id: string;\n label: string;\n path: string;\n children: NavLeaf[];\n};\n\nconst buildSections = (\n basePath: string,\n tr: (key: string, fallback: string) => string\n): NavSection[] => [\n {\n id: 'crewfoundry-dashboard',\n label: tr('crewfoundry.nav.dashboard', 'Dashboard'),\n path: joinPath(basePath, 'dashboard/dashboard-page'),\n children: [\n {\n id: 'crewfoundry-dashboard-overview',\n label: tr('crewfoundry.nav.dashboardOverview', 'Overview'),\n path: joinPath(basePath, 'dashboard/dashboard-page'),\n },\n {\n id: 'crewfoundry-dashboard-analytics',\n label: tr('crewfoundry.nav.dashboardAnalytics', 'Analytics'),\n path: joinPath(basePath, 'dashboard/analytics-page'),\n },\n {\n id: 'crewfoundry-dashboard-enhanced',\n label: tr('crewfoundry.nav.dashboardEnhanced', 'Enhanced Dashboard'),\n path: joinPath(basePath, 'dashboard/enhanced-dashboard-page'),\n },\n {\n id: 'crewfoundry-dashboard-executive',\n label: tr('crewfoundry.nav.dashboardExecutive', 'Executive Dashboard'),\n path: joinPath(basePath, 'dashboard/executive-dashboard'),\n },\n ],\n },\n {\n id: 'crewfoundry-hiring',\n label: tr('crewfoundry.nav.hiring', 'Hiring'),\n path: joinPath(basePath, 'hiring/jobs-page'),\n children: [\n {\n id: 'crewfoundry-hiring-jobs',\n label: tr('crewfoundry.nav.hiringJobs', 'Jobs'),\n path: joinPath(basePath, 'hiring/jobs-page'),\n },\n {\n id: 'crewfoundry-hiring-applications',\n label: tr('crewfoundry.nav.hiringApplications', 'Applications'),\n path: joinPath(basePath, 'hiring/applications-page'),\n },\n {\n id: 'crewfoundry-hiring-candidates',\n label: tr('crewfoundry.nav.hiringCandidates', 'Candidates'),\n path: joinPath(basePath, 'hiring/candidates-page'),\n },\n {\n id: 'crewfoundry-hiring-interviews',\n label: tr('crewfoundry.nav.hiringInterviews', 'Interviews'),\n path: joinPath(basePath, 'hiring/interviews-page'),\n },\n {\n id: 'crewfoundry-hiring-create-job',\n label: tr('crewfoundry.nav.hiringCreateJob', 'Create Job'),\n path: joinPath(basePath, 'hiring/create-job-page'),\n },\n {\n id: 'crewfoundry-hiring-job-details',\n label: tr('crewfoundry.nav.hiringJobDetails', 'Job Details'),\n path: joinPath(basePath, 'hiring/job-details-page'),\n },\n ],\n },\n {\n id: 'crewfoundry-hr',\n label: tr('crewfoundry.nav.hr', 'HR'),\n path: joinPath(basePath, 'hr/employees-page'),\n children: [\n {\n id: 'crewfoundry-hr-employees',\n label: tr('crewfoundry.nav.hrEmployees', 'Employees'),\n path: joinPath(basePath, 'hr/employees-page'),\n },\n {\n id: 'crewfoundry-hr-departments',\n label: tr('crewfoundry.nav.hrDepartments', 'Departments'),\n path: joinPath(basePath, 'hr/departments-page'),\n },\n {\n id: 'crewfoundry-hr-payroll',\n label: tr('crewfoundry.nav.hrPayroll', 'Payroll'),\n path: joinPath(basePath, 'hr/payroll-page'),\n },\n {\n id: 'crewfoundry-hr-leave',\n label: tr('crewfoundry.nav.hrLeaveManagement', 'Leave Management'),\n path: joinPath(basePath, 'hr/leave-management-page'),\n },\n {\n id: 'crewfoundry-hr-time',\n label: tr('crewfoundry.nav.hrTimeTracking', 'Time Tracking'),\n path: joinPath(basePath, 'hr/time-tracking-page'),\n },\n ],\n },\n {\n id: 'crewfoundry-learning',\n label: tr('crewfoundry.nav.learning', 'Learning'),\n path: joinPath(basePath, 'learning/courses-page'),\n children: [\n {\n id: 'crewfoundry-learning-courses',\n label: tr('crewfoundry.nav.learningCourses', 'Courses'),\n path: joinPath(basePath, 'learning/courses-page'),\n },\n {\n id: 'crewfoundry-learning-paths',\n label: tr('crewfoundry.nav.learningPaths', 'Learning Paths'),\n path: joinPath(basePath, 'learning/learning-paths-page'),\n },\n {\n id: 'crewfoundry-learning-certificates',\n label: tr('crewfoundry.nav.learningCertificates', 'Certificates'),\n path: joinPath(basePath, 'learning/certificates-page'),\n },\n {\n id: 'crewfoundry-learning-assessments',\n label: tr('crewfoundry.nav.learningAssessments', 'Assessments'),\n path: joinPath(basePath, 'learning/assessments-page'),\n },\n {\n id: 'crewfoundry-learning-my-learning',\n label: tr('crewfoundry.nav.learningMyLearning', 'My Learning'),\n path: joinPath(basePath, 'learning/my-learning-page'),\n },\n {\n id: 'crewfoundry-learning-analytics',\n label: tr('crewfoundry.nav.learningAnalytics', 'Learning Analytics'),\n path: joinPath(basePath, 'learning/learning-analytics-page'),\n },\n {\n id: 'crewfoundry-learning-course-details',\n label: tr('crewfoundry.nav.learningCourseDetails', 'Course Details'),\n path: joinPath(basePath, 'learning/course-details-page'),\n },\n {\n id: 'crewfoundry-learning-course-player',\n label: tr('crewfoundry.nav.learningCourseLearning', 'Course Learning'),\n path: joinPath(basePath, 'learning/course-learning-page'),\n },\n {\n id: 'crewfoundry-learning-path-detail',\n label: tr('crewfoundry.nav.learningPathDetail', 'Path Detail'),\n path: joinPath(basePath, 'learning/learning-path-detail-page'),\n },\n ],\n },\n {\n id: 'crewfoundry-teams',\n label: tr('crewfoundry.nav.teams', 'Teams'),\n path: joinPath(basePath, 'teams/teams-page'),\n children: [\n {\n id: 'crewfoundry-teams-list',\n label: tr('crewfoundry.nav.teamsList', 'Teams'),\n path: joinPath(basePath, 'teams/teams-page'),\n },\n {\n id: 'crewfoundry-teams-directory',\n label: tr('crewfoundry.nav.teamsDirectory', 'Directory'),\n path: joinPath(basePath, 'teams/team-directory-page'),\n },\n {\n id: 'crewfoundry-teams-detail',\n label: tr('crewfoundry.nav.teamsDetail', 'Team Detail'),\n path: joinPath(basePath, 'teams/team-detail-page'),\n },\n {\n id: 'crewfoundry-teams-analytics',\n label: tr('crewfoundry.nav.teamsAnalytics', 'Team Analytics'),\n path: joinPath(basePath, 'teams/team-analytics-page'),\n },\n {\n id: 'crewfoundry-teams-settings',\n label: tr('crewfoundry.nav.teamsSettings', 'Team Settings'),\n path: joinPath(basePath, 'teams/team-settings-page'),\n },\n ],\n },\n {\n id: 'crewfoundry-marketplace',\n label: tr('crewfoundry.nav.marketplace', 'Marketplace'),\n path: joinPath(basePath, 'marketplace/marketplace-page'),\n children: [\n {\n id: 'crewfoundry-marketplace-browse',\n label: tr('crewfoundry.nav.marketplaceBrowse', 'Marketplace'),\n path: joinPath(basePath, 'marketplace/marketplace-page'),\n },\n {\n id: 'crewfoundry-marketplace-services',\n label: tr('crewfoundry.nav.marketplaceServices', 'Services'),\n path: joinPath(basePath, 'marketplace/marketplace-services-page'),\n },\n {\n id: 'crewfoundry-marketplace-my-services',\n label: tr('crewfoundry.nav.marketplaceMyServices', 'My Services'),\n path: joinPath(basePath, 'marketplace/my-services-page'),\n },\n {\n id: 'crewfoundry-marketplace-project-details',\n label: tr('crewfoundry.nav.marketplaceProjectDetails', 'Project Details'),\n path: joinPath(basePath, 'marketplace/project-details-page'),\n },\n {\n id: 'crewfoundry-marketplace-service-details',\n label: tr('crewfoundry.nav.marketplaceServiceDetails', 'Service Details'),\n path: joinPath(basePath, 'marketplace/service-details-page'),\n },\n {\n id: 'crewfoundry-marketplace-messaging',\n label: tr('crewfoundry.nav.marketplaceMessaging', 'Messaging'),\n path: joinPath(basePath, 'marketplace/messaging-page'),\n },\n {\n id: 'crewfoundry-marketplace-earnings',\n label: tr('crewfoundry.nav.marketplaceEarnings', 'Earnings'),\n path: joinPath(basePath, 'marketplace/earnings-page'),\n },\n {\n id: 'crewfoundry-marketplace-bookings',\n label: tr('crewfoundry.nav.marketplaceBookingManagement', 'Booking Management'),\n path: joinPath(basePath, 'marketplace/booking-management-page'),\n },\n {\n id: 'crewfoundry-marketplace-freelancer-profile',\n label: tr('crewfoundry.nav.marketplaceFreelancerProfile', 'Freelancer Profile'),\n path: joinPath(basePath, 'marketplace/freelancer-profile-page'),\n },\n {\n id: 'crewfoundry-marketplace-freelancer-profile-enhanced',\n label: tr(\n 'crewfoundry.nav.marketplaceFreelancerProfileEnhanced',\n 'Freelancer Profile Enhanced'\n ),\n path: joinPath(basePath, 'marketplace/freelancer-profile-page-enhanced'),\n },\n ],\n },\n {\n id: 'crewfoundry-payments',\n label: tr('crewfoundry.nav.payments', 'Payments'),\n path: joinPath(basePath, 'payments/payment-dashboard-page'),\n children: [\n {\n id: 'crewfoundry-payments-dashboard',\n label: tr('crewfoundry.nav.paymentsDashboard', 'Payment Dashboard'),\n path: joinPath(basePath, 'payments/payment-dashboard-page'),\n },\n {\n id: 'crewfoundry-payments-invoices',\n label: tr('crewfoundry.nav.paymentsInvoices', 'Invoices'),\n path: joinPath(basePath, 'payments/invoices-page'),\n },\n {\n id: 'crewfoundry-payments-escrow',\n label: tr('crewfoundry.nav.paymentsEscrow', 'Escrow'),\n path: joinPath(basePath, 'payments/escrow-page'),\n },\n {\n id: 'crewfoundry-payments-methods',\n label: tr('crewfoundry.nav.paymentsMethods', 'Payment Methods'),\n path: joinPath(basePath, 'payments/payment-methods-page'),\n },\n {\n id: 'crewfoundry-payments-security',\n label: tr('crewfoundry.nav.paymentsSecurity', 'Security'),\n path: joinPath(basePath, 'payments/security-page'),\n },\n ],\n },\n {\n id: 'crewfoundry-communications',\n label: tr('crewfoundry.nav.communications', 'Communications'),\n path: joinPath(basePath, 'communications/announcements-page'),\n children: [\n {\n id: 'crewfoundry-communications-announcements',\n label: tr('crewfoundry.nav.communicationsAnnouncements', 'Announcements'),\n path: joinPath(basePath, 'communications/announcements-page'),\n },\n {\n id: 'crewfoundry-communications-messages',\n label: tr('crewfoundry.nav.communicationsMessages', 'Messages'),\n path: joinPath(basePath, 'communications/messages-page'),\n },\n {\n id: 'crewfoundry-communications-calls',\n label: tr('crewfoundry.nav.communicationsCalls', 'Calls'),\n path: joinPath(basePath, 'communications/calls-page'),\n },\n {\n id: 'crewfoundry-communications-video-calls',\n label: tr('crewfoundry.nav.communicationsVideoCalls', 'Video Calls'),\n path: joinPath(basePath, 'communications/video-calls-page'),\n },\n {\n id: 'crewfoundry-communications-files',\n label: tr('crewfoundry.nav.communicationsFiles', 'Files'),\n path: joinPath(basePath, 'communications/files-page'),\n },\n {\n id: 'crewfoundry-communications-directory',\n label: tr('crewfoundry.nav.communicationsDirectory', 'Directory'),\n path: joinPath(basePath, 'communications/directory-page'),\n },\n {\n id: 'crewfoundry-communications-teams',\n label: tr('crewfoundry.nav.communicationsTeams', 'Teams'),\n path: joinPath(basePath, 'communications/teams-page'),\n },\n ],\n },\n {\n id: 'crewfoundry-projects',\n label: tr('crewfoundry.nav.projects', 'Projects'),\n path: joinPath(basePath, 'projects/projects-page'),\n children: [\n {\n id: 'crewfoundry-projects-list',\n label: tr('crewfoundry.nav.projectsList', 'Projects'),\n path: joinPath(basePath, 'projects/projects-page'),\n },\n {\n id: 'crewfoundry-projects-create',\n label: tr('crewfoundry.nav.projectsCreate', 'Create Project'),\n path: joinPath(basePath, 'projects/create-project-page'),\n },\n {\n id: 'crewfoundry-projects-details',\n label: tr('crewfoundry.nav.projectsDetails', 'Project Details'),\n path: joinPath(basePath, 'projects/project-details-page'),\n },\n ],\n },\n {\n id: 'crewfoundry-company',\n label: tr('crewfoundry.nav.company', 'Company'),\n path: joinPath(basePath, 'company/company-dashboard-page'),\n children: [\n {\n id: 'crewfoundry-company-dashboard',\n label: tr('crewfoundry.nav.companyDashboard', 'Company Dashboard'),\n path: joinPath(basePath, 'company/company-dashboard-page'),\n },\n {\n id: 'crewfoundry-company-clients',\n label: tr('crewfoundry.nav.companyClientManagement', 'Client Management'),\n path: joinPath(basePath, 'company/client-management-page'),\n },\n {\n id: 'crewfoundry-company-vendors',\n label: tr('crewfoundry.nav.companyVendorManagement', 'Vendor Management'),\n path: joinPath(basePath, 'company/vendor-management-page'),\n },\n {\n id: 'crewfoundry-company-profile',\n label: tr('crewfoundry.nav.companyProfile', 'Company Profile'),\n path: joinPath(basePath, 'company/company-profile-page'),\n },\n ],\n },\n {\n id: 'crewfoundry-analytics',\n label: tr('crewfoundry.nav.analytics', 'Analytics'),\n path: joinPath(basePath, 'analytics/analytics-page'),\n children: [\n {\n id: 'crewfoundry-analytics-overview',\n label: tr('crewfoundry.nav.analyticsOverview', 'Overview'),\n path: joinPath(basePath, 'analytics/analytics-page'),\n },\n {\n id: 'crewfoundry-analytics-employee',\n label: tr('crewfoundry.nav.analyticsEmployee', 'Employee Analytics'),\n path: joinPath(basePath, 'analytics/employee-analytics-page'),\n },\n {\n id: 'crewfoundry-analytics-financial',\n label: tr('crewfoundry.nav.analyticsFinancial', 'Financial Analytics'),\n path: joinPath(basePath, 'analytics/financial-analytics-page'),\n },\n {\n id: 'crewfoundry-analytics-hiring',\n label: tr('crewfoundry.nav.analyticsHiring', 'Hiring Analytics'),\n path: joinPath(basePath, 'analytics/hiring-analytics-page'),\n },\n ],\n },\n {\n id: 'crewfoundry-help',\n label: tr('crewfoundry.nav.help', 'Help'),\n path: joinPath(basePath, 'help/api-documentation-page'),\n children: [\n {\n id: 'crewfoundry-help-api',\n label: tr('crewfoundry.nav.helpApiDocumentation', 'API Documentation'),\n path: joinPath(basePath, 'help/api-documentation-page'),\n },\n ],\n },\n];\n\nexport const CrewFoundryRoot: FC<CrewFoundryRootProps> = (props) => {\n const { registerNavItems, registerFooterItems, basePath = '/' } = props;\n const initializeData = useCrewFoundryStore((state) => state.initializeData);\n const tr = useTr();\n\n useEffect(() => {\n void initializeData({\n workspaceId: props.workspaceId,\n authToken: props.authToken,\n apiGatewayUrl: props.apiGatewayUrl,\n actorId: props.currentUser?.id,\n });\n }, [\n initializeData,\n props.workspaceId,\n props.authToken,\n props.apiGatewayUrl,\n props.currentUser?.id,\n ]);\n\n useEffect(() => {\n if (!registerNavItems) {\n return;\n }\n\n const navItem: NavItem = {\n id: 'crewfoundry',\n label: tr('crewfoundry.nav.product', 'CrewFoundry'),\n path: basePath,\n icon: <LayoutDashboard size={20} />,\n order: 80,\n group: 'products',\n children: buildSections(basePath, tr).map((section) => ({\n id: section.id,\n label: section.label,\n path: section.path,\n icon: <Folder size={16} />,\n children: section.children.map((child) => ({\n id: child.id,\n label: child.label,\n path: child.path,\n icon: <FileText size={16} />,\n })),\n })),\n };\n\n return registerNavItems(navItem);\n }, [registerNavItems, basePath, tr]);\n\n useEffect(() => {\n if (!registerFooterItems) {\n return;\n }\n\n return registerFooterItems([\n {\n id: 'crewfoundry-status',\n label: tr('crewfoundry.nav.footerStatus', 'CrewFoundry Ready'),\n type: 'status',\n section: 'left',\n order: 10,\n },\n ]);\n }, [registerFooterItems, tr]);\n\n return (\n <FeatureFlagProvider workspaceId={null} gateway=\"global\" defaultEnabled={true}>\n <CrewFoundryProvider {...props}>\n <CrewFoundryRoutes />\n </CrewFoundryProvider>\n </FeatureFlagProvider>\n );\n};\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ConfirmDialog.d.ts","sourceRoot":"","sources":["../../../../src/crewfoundry/components/forms/ConfirmDialog.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ConfirmDialog.d.ts","sourceRoot":"","sources":["../../../../src/crewfoundry/components/forms/ConfirmDialog.tsx"],"names":[],"mappings":"AAaA,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,OAAO,CAAC;IACd,YAAY,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IACtC,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,SAAS,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAChC;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,EAC5B,IAAI,EACJ,YAAY,EACZ,KAAK,EACL,WAAW,EACX,YAAY,EACZ,WAAmB,EACnB,SAAS,GACV,EAAE,kBAAkB,+BAsDpB"}
|
|
@@ -1,43 +1,44 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
1
|
+
import { useTr as e } from "../../../shared/hooks/useTr.js";
|
|
2
|
+
import { useState as t } from "react";
|
|
3
|
+
import { jsx as n, jsxs as r } from "react/jsx-runtime";
|
|
4
|
+
import { Button as i, ResponsiveDialog as a, ResponsiveDialogContent as o, ResponsiveDialogDescription as s, ResponsiveDialogFooter as c, ResponsiveDialogHeader as l, ResponsiveDialogTitle as u } from "@burdenoff/fe-libs/ui";
|
|
5
|
+
import { useGlobalUi as d } from "@burdenoff/fe-libs/shared/providers/shell";
|
|
5
6
|
//#region src/crewfoundry/components/forms/ConfirmDialog.tsx
|
|
6
|
-
function
|
|
7
|
-
let { showToast:
|
|
8
|
-
return /* @__PURE__ */
|
|
9
|
-
open:
|
|
10
|
-
onOpenChange:
|
|
11
|
-
children: /* @__PURE__ */
|
|
7
|
+
function f({ open: f, onOpenChange: p, title: m, description: h, confirmLabel: g, destructive: _ = !1, onConfirm: v }) {
|
|
8
|
+
let { showToast: y } = d(), b = e(), x = g ?? b("confirmDialog.confirm", "Confirm"), [S, C] = t(!1);
|
|
9
|
+
return /* @__PURE__ */ n(a, {
|
|
10
|
+
open: f,
|
|
11
|
+
onOpenChange: p,
|
|
12
|
+
children: /* @__PURE__ */ r(o, {
|
|
12
13
|
className: "sm:max-w-[420px]",
|
|
13
|
-
children: [/* @__PURE__ */
|
|
14
|
+
children: [/* @__PURE__ */ r(l, { children: [/* @__PURE__ */ n(u, { children: m }), h ? /* @__PURE__ */ n(s, { children: h }) : null] }), /* @__PURE__ */ r(c, { children: [/* @__PURE__ */ n(i, {
|
|
14
15
|
type: "button",
|
|
15
16
|
variant: "outline",
|
|
16
|
-
onClick: () =>
|
|
17
|
-
disabled:
|
|
18
|
-
children: "Cancel"
|
|
19
|
-
}), /* @__PURE__ */
|
|
17
|
+
onClick: () => p(!1),
|
|
18
|
+
disabled: S,
|
|
19
|
+
children: b("confirmDialog.cancel", "Cancel")
|
|
20
|
+
}), /* @__PURE__ */ n(i, {
|
|
20
21
|
type: "button",
|
|
21
|
-
variant:
|
|
22
|
+
variant: _ ? "destructive" : "default",
|
|
22
23
|
onClick: async () => {
|
|
23
|
-
if (!
|
|
24
|
-
|
|
24
|
+
if (!S) {
|
|
25
|
+
C(!0);
|
|
25
26
|
try {
|
|
26
|
-
await
|
|
27
|
+
await v(), p(!1);
|
|
27
28
|
} catch (e) {
|
|
28
|
-
|
|
29
|
+
y(e instanceof Error ? e.message : b("confirmDialog.error", "Something went wrong"), "error");
|
|
29
30
|
} finally {
|
|
30
|
-
|
|
31
|
+
C(!1);
|
|
31
32
|
}
|
|
32
33
|
}
|
|
33
34
|
},
|
|
34
|
-
disabled:
|
|
35
|
-
children:
|
|
35
|
+
disabled: S,
|
|
36
|
+
children: S ? b("confirmDialog.working", "Working…") : x
|
|
36
37
|
})] })]
|
|
37
38
|
})
|
|
38
39
|
});
|
|
39
40
|
}
|
|
40
41
|
//#endregion
|
|
41
|
-
export {
|
|
42
|
+
export { f as ConfirmDialog };
|
|
42
43
|
|
|
43
44
|
//# sourceMappingURL=ConfirmDialog.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ConfirmDialog.js","names":[],"sources":["../../../../src/crewfoundry/components/forms/ConfirmDialog.tsx"],"sourcesContent":["import { useState } from 'react';\nimport {\n Button,\n ResponsiveDialog,\n ResponsiveDialogContent,\n ResponsiveDialogDescription,\n ResponsiveDialogFooter,\n ResponsiveDialogHeader,\n ResponsiveDialogTitle,\n} from '@burdenoff/fe-libs/ui';\nimport { useGlobalUi } from '@burdenoff/fe-libs/shared/providers/shell';\n\nexport interface ConfirmDialogProps {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n title: string;\n description?: string;\n confirmLabel?: string;\n destructive?: boolean;\n onConfirm: () => Promise<void>;\n}\n\n/**\n * Small accessible confirm dialog built on the shared ResponsiveDialog so\n * destructive actions (delete) never rely on native window.confirm.\n */\nexport function ConfirmDialog({\n open,\n onOpenChange,\n title,\n description,\n confirmLabel
|
|
1
|
+
{"version":3,"file":"ConfirmDialog.js","names":[],"sources":["../../../../src/crewfoundry/components/forms/ConfirmDialog.tsx"],"sourcesContent":["import { useState } from 'react';\nimport {\n Button,\n ResponsiveDialog,\n ResponsiveDialogContent,\n ResponsiveDialogDescription,\n ResponsiveDialogFooter,\n ResponsiveDialogHeader,\n ResponsiveDialogTitle,\n} from '@burdenoff/fe-libs/ui';\nimport { useGlobalUi } from '@burdenoff/fe-libs/shared/providers/shell';\nimport { useTr } from '../../../shared/hooks/useTr';\n\nexport interface ConfirmDialogProps {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n title: string;\n description?: string;\n confirmLabel?: string;\n destructive?: boolean;\n onConfirm: () => Promise<void>;\n}\n\n/**\n * Small accessible confirm dialog built on the shared ResponsiveDialog so\n * destructive actions (delete) never rely on native window.confirm.\n */\nexport function ConfirmDialog({\n open,\n onOpenChange,\n title,\n description,\n confirmLabel,\n destructive = false,\n onConfirm,\n}: ConfirmDialogProps) {\n const { showToast } = useGlobalUi();\n const tr = useTr();\n const resolvedConfirmLabel = confirmLabel ?? tr('confirmDialog.confirm', 'Confirm');\n const [pending, setPending] = useState(false);\n\n const handleConfirm = async () => {\n if (pending) {\n return;\n }\n setPending(true);\n try {\n await onConfirm();\n onOpenChange(false);\n } catch (error) {\n showToast(\n error instanceof Error ? error.message : tr('confirmDialog.error', 'Something went wrong'),\n 'error'\n );\n } finally {\n setPending(false);\n }\n };\n\n return (\n <ResponsiveDialog open={open} onOpenChange={onOpenChange}>\n <ResponsiveDialogContent className=\"sm:max-w-[420px]\">\n <ResponsiveDialogHeader>\n <ResponsiveDialogTitle>{title}</ResponsiveDialogTitle>\n {description ? (\n <ResponsiveDialogDescription>{description}</ResponsiveDialogDescription>\n ) : null}\n </ResponsiveDialogHeader>\n <ResponsiveDialogFooter>\n <Button\n type=\"button\"\n variant=\"outline\"\n onClick={() => onOpenChange(false)}\n disabled={pending}\n >\n {tr('confirmDialog.cancel', 'Cancel')}\n </Button>\n <Button\n type=\"button\"\n variant={destructive ? 'destructive' : 'default'}\n onClick={handleConfirm}\n disabled={pending}\n >\n {pending ? tr('confirmDialog.working', 'Working…') : resolvedConfirmLabel}\n </Button>\n </ResponsiveDialogFooter>\n </ResponsiveDialogContent>\n </ResponsiveDialog>\n );\n}\n"],"mappings":";;;;;;AA2BA,SAAgB,EAAc,EAC5B,SACA,iBACA,UACA,gBACA,iBACA,iBAAc,IACd,gBACqB;CACrB,IAAM,EAAE,iBAAc,GAAa,EAC7B,IAAK,GAAO,EACZ,IAAuB,KAAgB,EAAG,yBAAyB,UAAU,EAC7E,CAAC,GAAS,KAAc,EAAS,GAAM;AAoB7C,QACE,kBAAC,GAAD;EAAwB;EAAoB;YAC1C,kBAAC,GAAD;GAAyB,WAAU;aAAnC,CACE,kBAAC,GAAD,EAAA,UAAA,CACE,kBAAC,GAAD,EAAA,UAAwB,GAA8B,CAAA,EACrD,IACC,kBAAC,GAAD,EAAA,UAA8B,GAA0C,CAAA,GACtE,KACmB,EAAA,CAAA,EACzB,kBAAC,GAAD,EAAA,UAAA,CACE,kBAAC,GAAD;IACE,MAAK;IACL,SAAQ;IACR,eAAe,EAAa,GAAM;IAClC,UAAU;cAET,EAAG,wBAAwB,SAAS;IAC9B,CAAA,EACT,kBAAC,GAAD;IACE,MAAK;IACL,SAAS,IAAc,gBAAgB;IACvC,SAvCY,YAAY;AAC5B,aAGJ;QAAW,GAAK;AAChB,UAAI;AAEF,OADA,MAAM,GAAW,EACjB,EAAa,GAAM;eACZ,GAAO;AACd,SACE,aAAiB,QAAQ,EAAM,UAAU,EAAG,uBAAuB,uBAAuB,EAC1F,QACD;gBACO;AACR,SAAW,GAAM;;;;IA0BX,UAAU;cAET,IAAU,EAAG,yBAAyB,WAAW,GAAG;IAC9C,CAAA,CACc,EAAA,CAAA,CACD;;EACT,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FormModal.d.ts","sourceRoot":"","sources":["../../../../src/crewfoundry/components/forms/FormModal.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"FormModal.d.ts","sourceRoot":"","sources":["../../../../src/crewfoundry/components/forms/FormModal.tsx"],"names":[],"mappings":"AAmBA,MAAM,MAAM,aAAa,GACvB,MAAM,GAAG,QAAQ,GAAG,MAAM,GAAG,OAAO,GAAG,UAAU,GAAG,QAAQ,GAAG,MAAM,GAAG,QAAQ,CAAC;AAEnF,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,EAAE,CAAC;AAC7D,MAAM,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;AAEnD,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,aAAa,CAAC;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,WAAW,EAAE,CAAC;IACxB,wFAAwF;IACxF,OAAO,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;CACjB;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,OAAO,CAAC;IACd,YAAY,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IACtC,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,WAAW,EAAE,CAAC;IACtB,aAAa,CAAC,EAAE,UAAU,CAAC;IAC3B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,CAAC,MAAM,EAAE,UAAU,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACjD;AAkED,wBAAgB,SAAS,CAAC,EACxB,IAAI,EACJ,YAAY,EACZ,KAAK,EACL,WAAW,EACX,MAAM,EACN,aAAa,EACb,WAAW,EACX,QAAQ,GACT,EAAE,cAAc,+BAsRhB;AAGD,MAAM,WAAW,kBAAkB,CAAC,QAAQ;IAC1C,IAAI,EAAE,OAAO,CAAC;IACd,0EAA0E;IAC1E,OAAO,EAAE,QAAQ,GAAG,IAAI,CAAC;IACzB,SAAS,EAAE,CAAC,OAAO,CAAC,EAAE,QAAQ,KAAK,IAAI,CAAC;IACxC,UAAU,EAAE,MAAM,IAAI,CAAC;IACvB,YAAY,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;CACvC;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,QAAQ,GAAG,IAAI,KAAK,kBAAkB,CAAC,QAAQ,CAAC,CAmB5E"}
|
|
@@ -1,17 +1,18 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
1
|
+
import { useTr as e } from "../../../shared/hooks/useTr.js";
|
|
2
|
+
import { useCallback as t, useEffect as n, useRef as r, useState as i } from "react";
|
|
3
|
+
import { X as a } from "lucide-react";
|
|
4
|
+
import { Fragment as o, jsx as s, jsxs as c } from "react/jsx-runtime";
|
|
5
|
+
import { Button as l, Input as u, Label as d, ResponsiveDialog as f, ResponsiveDialogContent as p, ResponsiveDialogDescription as m, ResponsiveDialogFooter as h, ResponsiveDialogHeader as g, ResponsiveDialogTitle as _, Switch as v, Textarea as y } from "@burdenoff/fe-libs/ui";
|
|
6
|
+
import { useGlobalUi as b } from "@burdenoff/fe-libs/shared/providers/shell";
|
|
6
7
|
//#region src/crewfoundry/components/forms/FormModal.tsx
|
|
7
|
-
var
|
|
8
|
+
var x = (e, t) => {
|
|
8
9
|
let n = {};
|
|
9
10
|
for (let r of e) {
|
|
10
11
|
let e = t?.[r.name];
|
|
11
12
|
r.type === "switch" ? n[r.name] = !!e : r.type === "tags" ? Array.isArray(e) ? n[r.name] = e.map((e) => String(e)) : typeof e == "string" && e.length > 0 ? n[r.name] = e.split(",").map((e) => e.trim()).filter(Boolean) : n[r.name] = [] : n[r.name] = e == null ? "" : String(e);
|
|
12
13
|
}
|
|
13
14
|
return n;
|
|
14
|
-
},
|
|
15
|
+
}, S = (e, t) => e.type === "switch" ? !1 : e.type === "tags" ? !Array.isArray(t) || t.length === 0 : typeof t != "string" || t.trim() === "", C = (e, t) => {
|
|
15
16
|
let n = {};
|
|
16
17
|
for (let r of e) {
|
|
17
18
|
let e = t[r.name];
|
|
@@ -23,23 +24,23 @@ var b = (e, t) => {
|
|
|
23
24
|
} else n[r.name] = typeof e == "string" ? e : "";
|
|
24
25
|
}
|
|
25
26
|
return n;
|
|
26
|
-
},
|
|
27
|
-
function
|
|
28
|
-
let { showToast:
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
}, [
|
|
32
|
-
|
|
33
|
-
}, [
|
|
34
|
-
let
|
|
35
|
-
|
|
27
|
+
}, w = "flex h-10 w-full rounded-input border border-border-default bg-bg-surface px-3 py-2 text-sm text-text-primary transition-colors duration-200 focus-visible:border-border-focus focus-visible:outline-none focus-visible:shadow-[var(--shadow-focus)] focus-visible:ring-1 focus-visible:ring-[var(--color-focus-ring)] disabled:cursor-not-allowed disabled:opacity-50";
|
|
28
|
+
function T({ open: T, onOpenChange: E, title: D, description: O, fields: k, initialValues: A, submitLabel: j, onSubmit: M }) {
|
|
29
|
+
let { showToast: N } = b(), P = e(), F = j ?? P("formModal.submitLabel", "Save"), [I, L] = i(() => x(k, A)), [R, z] = i({}), [B, V] = i(!1), H = r(k), U = r(A), W = r(!1);
|
|
30
|
+
n(() => {
|
|
31
|
+
H.current = k, U.current = A;
|
|
32
|
+
}, [k, A]), n(() => {
|
|
33
|
+
T && !W.current && (L(x(H.current, U.current)), z({}), V(!1)), W.current = T;
|
|
34
|
+
}, [T]);
|
|
35
|
+
let G = t((e, t) => {
|
|
36
|
+
L((n) => ({
|
|
36
37
|
...n,
|
|
37
38
|
[e]: t
|
|
38
39
|
}));
|
|
39
|
-
}, []),
|
|
40
|
-
|
|
40
|
+
}, []), K = t((e) => {
|
|
41
|
+
z((t) => {
|
|
41
42
|
let n = (t[e] ?? "").trim();
|
|
42
|
-
return n &&
|
|
43
|
+
return n && L((t) => {
|
|
43
44
|
let r = Array.isArray(t[e]) ? t[e] : [];
|
|
44
45
|
return r.includes(n) ? t : {
|
|
45
46
|
...t,
|
|
@@ -50,171 +51,172 @@ function w({ open: w, onOpenChange: T, title: E, description: D, fields: O, init
|
|
|
50
51
|
[e]: ""
|
|
51
52
|
};
|
|
52
53
|
});
|
|
53
|
-
}, []),
|
|
54
|
-
|
|
54
|
+
}, []), q = t((e, t) => {
|
|
55
|
+
L((n) => {
|
|
55
56
|
let r = Array.isArray(n[e]) ? n[e] : [];
|
|
56
57
|
return {
|
|
57
58
|
...n,
|
|
58
59
|
[e]: r.filter((e) => e !== t)
|
|
59
60
|
};
|
|
60
61
|
});
|
|
61
|
-
}, []),
|
|
62
|
-
if (e.preventDefault(),
|
|
63
|
-
let t = { ...
|
|
64
|
-
for (let e of
|
|
65
|
-
let n = (
|
|
62
|
+
}, []), J = t(async (e) => {
|
|
63
|
+
if (e.preventDefault(), B) return;
|
|
64
|
+
let t = { ...I };
|
|
65
|
+
for (let e of k) if (e.type === "tags") {
|
|
66
|
+
let n = (R[e.name] ?? "").trim();
|
|
66
67
|
if (n) {
|
|
67
68
|
let r = Array.isArray(t[e.name]) ? t[e.name] : [];
|
|
68
69
|
r.includes(n) || (t[e.name] = [...r, n]);
|
|
69
70
|
}
|
|
70
71
|
}
|
|
71
|
-
let n =
|
|
72
|
+
let n = k.find((e) => e.required && S(e, t[e.name]));
|
|
72
73
|
if (n) {
|
|
73
|
-
|
|
74
|
+
N(P("formModal.fieldRequired", "{{label}} is required", { label: n.label }), "warning");
|
|
74
75
|
return;
|
|
75
76
|
}
|
|
76
|
-
|
|
77
|
+
V(!0);
|
|
77
78
|
try {
|
|
78
|
-
await
|
|
79
|
+
await M(C(k, t)), E(!1);
|
|
79
80
|
} catch (e) {
|
|
80
|
-
|
|
81
|
+
N(e instanceof Error ? e.message : P("formModal.submitError", "Something went wrong"), "error");
|
|
81
82
|
} finally {
|
|
82
|
-
|
|
83
|
+
V(!1);
|
|
83
84
|
}
|
|
84
85
|
}, [
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
j,
|
|
86
|
+
k,
|
|
87
|
+
E,
|
|
88
88
|
M,
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
89
|
+
N,
|
|
90
|
+
B,
|
|
91
|
+
R,
|
|
92
|
+
P,
|
|
93
|
+
I
|
|
92
94
|
]);
|
|
93
|
-
return /* @__PURE__ */
|
|
94
|
-
open:
|
|
95
|
-
onOpenChange:
|
|
96
|
-
children: /* @__PURE__ */
|
|
95
|
+
return /* @__PURE__ */ s(f, {
|
|
96
|
+
open: T,
|
|
97
|
+
onOpenChange: E,
|
|
98
|
+
children: /* @__PURE__ */ c(p, {
|
|
97
99
|
className: "max-h-[85vh] overflow-y-auto sm:max-w-[560px]",
|
|
98
|
-
children: [/* @__PURE__ */
|
|
99
|
-
onSubmit:
|
|
100
|
+
children: [/* @__PURE__ */ c(g, { children: [/* @__PURE__ */ s(_, { children: D }), O ? /* @__PURE__ */ s(m, { children: O }) : null] }), /* @__PURE__ */ c("form", {
|
|
101
|
+
onSubmit: J,
|
|
100
102
|
className: "space-y-4",
|
|
101
|
-
children: [/* @__PURE__ */
|
|
103
|
+
children: [/* @__PURE__ */ s("div", {
|
|
102
104
|
className: "grid grid-cols-1 gap-4 md:grid-cols-2",
|
|
103
|
-
children:
|
|
104
|
-
let t = `formmodal-${e.name}`, n = e.colSpan === 2 || e.colSpan === void 0 && (e.type === "textarea" || e.type === "tags"), r =
|
|
105
|
-
return /* @__PURE__ */
|
|
105
|
+
children: k.map((e) => {
|
|
106
|
+
let t = `formmodal-${e.name}`, n = e.colSpan === 2 || e.colSpan === void 0 && (e.type === "textarea" || e.type === "tags"), r = I[e.name];
|
|
107
|
+
return /* @__PURE__ */ s("div", {
|
|
106
108
|
className: `flex flex-col gap-1.5 ${n ? "md:col-span-2" : ""}`,
|
|
107
|
-
children: e.type === "switch" ? /* @__PURE__ */
|
|
109
|
+
children: e.type === "switch" ? /* @__PURE__ */ c("div", {
|
|
108
110
|
className: "flex items-center justify-between gap-3 rounded-input border border-border-default bg-bg-surface px-3 py-2",
|
|
109
|
-
children: [/* @__PURE__ */
|
|
111
|
+
children: [/* @__PURE__ */ c(d, {
|
|
110
112
|
htmlFor: t,
|
|
111
|
-
children: [e.label, e.required ? /* @__PURE__ */
|
|
113
|
+
children: [e.label, e.required ? /* @__PURE__ */ s("span", {
|
|
112
114
|
className: "text-status-error-fg",
|
|
113
115
|
children: " *"
|
|
114
116
|
}) : null]
|
|
115
|
-
}), /* @__PURE__ */
|
|
117
|
+
}), /* @__PURE__ */ s(v, {
|
|
116
118
|
id: t,
|
|
117
119
|
checked: !!r,
|
|
118
|
-
onCheckedChange: (t) =>
|
|
119
|
-
disabled:
|
|
120
|
+
onCheckedChange: (t) => G(e.name, t),
|
|
121
|
+
disabled: B
|
|
120
122
|
})]
|
|
121
|
-
}) : /* @__PURE__ */
|
|
123
|
+
}) : /* @__PURE__ */ c(o, { children: [/* @__PURE__ */ c(d, {
|
|
122
124
|
htmlFor: t,
|
|
123
|
-
children: [e.label, e.required ? /* @__PURE__ */
|
|
125
|
+
children: [e.label, e.required ? /* @__PURE__ */ s("span", {
|
|
124
126
|
className: "text-status-error-fg",
|
|
125
127
|
children: " *"
|
|
126
128
|
}) : null]
|
|
127
|
-
}), e.type === "textarea" ? /* @__PURE__ */
|
|
129
|
+
}), e.type === "textarea" ? /* @__PURE__ */ s(y, {
|
|
128
130
|
id: t,
|
|
129
131
|
value: typeof r == "string" ? r : "",
|
|
130
132
|
placeholder: e.placeholder,
|
|
131
|
-
disabled:
|
|
132
|
-
onChange: (t) =>
|
|
133
|
-
}) : e.type === "select" ? /* @__PURE__ */
|
|
133
|
+
disabled: B,
|
|
134
|
+
onChange: (t) => G(e.name, t.target.value)
|
|
135
|
+
}) : e.type === "select" ? /* @__PURE__ */ c("select", {
|
|
134
136
|
id: t,
|
|
135
|
-
className:
|
|
137
|
+
className: w,
|
|
136
138
|
value: typeof r == "string" ? r : "",
|
|
137
|
-
disabled:
|
|
138
|
-
onChange: (t) =>
|
|
139
|
-
children: [/* @__PURE__ */
|
|
139
|
+
disabled: B,
|
|
140
|
+
onChange: (t) => G(e.name, t.target.value),
|
|
141
|
+
children: [/* @__PURE__ */ s("option", {
|
|
140
142
|
value: "",
|
|
141
143
|
disabled: !0,
|
|
142
|
-
children: e.placeholder ?? "Select…"
|
|
143
|
-
}), (e.options ?? []).map((e) => /* @__PURE__ */
|
|
144
|
+
children: e.placeholder ?? P("formModal.selectPlaceholder", "Select…")
|
|
145
|
+
}), (e.options ?? []).map((e) => /* @__PURE__ */ s("option", {
|
|
144
146
|
value: e.value,
|
|
145
147
|
children: e.label
|
|
146
148
|
}, e.value))]
|
|
147
|
-
}) : e.type === "tags" ? /* @__PURE__ */
|
|
149
|
+
}) : e.type === "tags" ? /* @__PURE__ */ c("div", {
|
|
148
150
|
className: "flex min-h-10 flex-wrap items-center gap-1.5 rounded-input border border-border-default bg-bg-surface px-2 py-1.5",
|
|
149
|
-
children: [(Array.isArray(r) ? r : []).map((t) => /* @__PURE__ */
|
|
151
|
+
children: [(Array.isArray(r) ? r : []).map((t) => /* @__PURE__ */ c("span", {
|
|
150
152
|
className: "inline-flex items-center gap-1 rounded-full bg-bg-sunken px-2 py-0.5 text-xs text-text-primary",
|
|
151
|
-
children: [t, /* @__PURE__ */
|
|
153
|
+
children: [t, /* @__PURE__ */ s("button", {
|
|
152
154
|
type: "button",
|
|
153
|
-
"aria-label":
|
|
155
|
+
"aria-label": P("formModal.removeTag", "Remove {{tag}}", { tag: t }),
|
|
154
156
|
className: "text-text-secondary hover:text-text-primary",
|
|
155
|
-
onClick: () =>
|
|
156
|
-
disabled:
|
|
157
|
-
children: /* @__PURE__ */
|
|
157
|
+
onClick: () => q(e.name, t),
|
|
158
|
+
disabled: B,
|
|
159
|
+
children: /* @__PURE__ */ s(a, { className: "h-3 w-3" })
|
|
158
160
|
})]
|
|
159
|
-
}, t)), /* @__PURE__ */
|
|
161
|
+
}, t)), /* @__PURE__ */ s("input", {
|
|
160
162
|
id: t,
|
|
161
163
|
className: "min-w-[6rem] flex-1 bg-transparent text-sm text-text-primary outline-none placeholder:text-text-placeholder",
|
|
162
|
-
value:
|
|
163
|
-
placeholder: e.placeholder ?? "Add and press Enter",
|
|
164
|
-
disabled:
|
|
165
|
-
onChange: (t) =>
|
|
164
|
+
value: R[e.name] ?? "",
|
|
165
|
+
placeholder: e.placeholder ?? P("formModal.tagsPlaceholder", "Add and press Enter"),
|
|
166
|
+
disabled: B,
|
|
167
|
+
onChange: (t) => z((n) => ({
|
|
166
168
|
...n,
|
|
167
169
|
[e.name]: t.target.value
|
|
168
170
|
})),
|
|
169
171
|
onKeyDown: (t) => {
|
|
170
|
-
if (t.key === "Enter" || t.key === ",") t.preventDefault(),
|
|
171
|
-
else if (t.key === "Backspace" && (
|
|
172
|
+
if (t.key === "Enter" || t.key === ",") t.preventDefault(), K(e.name);
|
|
173
|
+
else if (t.key === "Backspace" && (R[e.name] ?? "") === "") {
|
|
172
174
|
let t = Array.isArray(r) ? r : [];
|
|
173
|
-
t.length > 0 &&
|
|
175
|
+
t.length > 0 && q(e.name, t[t.length - 1]);
|
|
174
176
|
}
|
|
175
177
|
},
|
|
176
|
-
onBlur: () =>
|
|
178
|
+
onBlur: () => K(e.name)
|
|
177
179
|
})]
|
|
178
|
-
}) : /* @__PURE__ */
|
|
180
|
+
}) : /* @__PURE__ */ s(u, {
|
|
179
181
|
id: t,
|
|
180
182
|
type: e.type === "number" ? "number" : e.type === "date" ? "date" : e.type === "email" ? "email" : "text",
|
|
181
183
|
value: typeof r == "string" ? r : "",
|
|
182
184
|
placeholder: e.placeholder,
|
|
183
|
-
disabled:
|
|
184
|
-
onChange: (t) =>
|
|
185
|
+
disabled: B,
|
|
186
|
+
onChange: (t) => G(e.name, t.target.value)
|
|
185
187
|
})] })
|
|
186
188
|
}, e.name);
|
|
187
189
|
})
|
|
188
|
-
}), /* @__PURE__ */
|
|
190
|
+
}), /* @__PURE__ */ c(h, { children: [/* @__PURE__ */ s(l, {
|
|
189
191
|
type: "button",
|
|
190
192
|
variant: "outline",
|
|
191
|
-
onClick: () =>
|
|
192
|
-
disabled:
|
|
193
|
-
children: "Cancel"
|
|
194
|
-
}), /* @__PURE__ */
|
|
193
|
+
onClick: () => E(!1),
|
|
194
|
+
disabled: B,
|
|
195
|
+
children: P("formModal.cancel", "Cancel")
|
|
196
|
+
}), /* @__PURE__ */ s(l, {
|
|
195
197
|
type: "submit",
|
|
196
|
-
disabled:
|
|
197
|
-
children:
|
|
198
|
+
disabled: B,
|
|
199
|
+
children: B ? P("formModal.saving", "Saving…") : F
|
|
198
200
|
})] })]
|
|
199
201
|
})]
|
|
200
202
|
})
|
|
201
203
|
});
|
|
202
204
|
}
|
|
203
|
-
function
|
|
204
|
-
let [
|
|
205
|
+
function E() {
|
|
206
|
+
let [e, n] = i(!1), [r, a] = i(null);
|
|
205
207
|
return {
|
|
206
|
-
open:
|
|
207
|
-
context:
|
|
208
|
-
openModal:
|
|
208
|
+
open: e,
|
|
209
|
+
context: r,
|
|
210
|
+
openModal: t((e) => {
|
|
209
211
|
a(e ?? null), n(!0);
|
|
210
212
|
}, []),
|
|
211
|
-
closeModal:
|
|
212
|
-
onOpenChange:
|
|
213
|
+
closeModal: t(() => n(!1), []),
|
|
214
|
+
onOpenChange: t((e) => {
|
|
213
215
|
n(e), e || a(null);
|
|
214
216
|
}, [])
|
|
215
217
|
};
|
|
216
218
|
}
|
|
217
219
|
//#endregion
|
|
218
|
-
export {
|
|
220
|
+
export { T as FormModal, E as useFormModal };
|
|
219
221
|
|
|
220
222
|
//# sourceMappingURL=FormModal.js.map
|