@burdenoff/microfe-housingvista 2026.703.2 → 2026.703.4
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/housingvista/HousingVistaRoot.js +23 -23
- package/dist/housingvista/HousingVistaRoot.js.map +1 -1
- package/dist/housingvista/HousingVistaRoutes.js +37 -17
- package/dist/housingvista/HousingVistaRoutes.js.map +1 -1
- package/dist/housingvista/components/Breadcrumbs.js +32 -27
- package/dist/housingvista/components/Breadcrumbs.js.map +1 -1
- package/dist/housingvista/components/ContactOwnerDialog.js +104 -0
- package/dist/housingvista/components/ContactOwnerDialog.js.map +1 -0
- package/dist/housingvista/components/FileUploader.js +72 -0
- package/dist/housingvista/components/FileUploader.js.map +1 -0
- package/dist/housingvista/components/ReviewsSection.js +131 -0
- package/dist/housingvista/components/ReviewsSection.js.map +1 -0
- package/dist/housingvista/components/index.js +3 -0
- package/dist/housingvista/hooks/index.js +768 -223
- package/dist/housingvista/hooks/index.js.map +1 -1
- package/dist/housingvista/hooks/platform.js +228 -0
- package/dist/housingvista/hooks/platform.js.map +1 -0
- package/dist/housingvista/pages/HomePage.js +126 -134
- package/dist/housingvista/pages/HomePage.js.map +1 -1
- package/dist/housingvista/pages/amc/AMCManagementPage.js +209 -170
- package/dist/housingvista/pages/amc/AMCManagementPage.js.map +1 -1
- package/dist/housingvista/pages/analytics/AnalyticsPage.js +123 -145
- package/dist/housingvista/pages/analytics/AnalyticsPage.js.map +1 -1
- package/dist/housingvista/pages/assets/AssetDetailPage.js +287 -0
- package/dist/housingvista/pages/assets/AssetDetailPage.js.map +1 -0
- package/dist/housingvista/pages/assets/AssetManagementPage.js +407 -109
- package/dist/housingvista/pages/assets/AssetManagementPage.js.map +1 -1
- package/dist/housingvista/pages/finance/HomeLoanDetailPage.js +350 -0
- package/dist/housingvista/pages/finance/HomeLoanDetailPage.js.map +1 -0
- package/dist/housingvista/pages/finance/HomeLoansPage.js +160 -132
- package/dist/housingvista/pages/finance/HomeLoansPage.js.map +1 -1
- package/dist/housingvista/pages/investments/InvestmentDetailPage.js +615 -400
- package/dist/housingvista/pages/investments/InvestmentDetailPage.js.map +1 -1
- package/dist/housingvista/pages/investments/InvestmentsPage.js +210 -191
- package/dist/housingvista/pages/investments/InvestmentsPage.js.map +1 -1
- package/dist/housingvista/pages/legal/LegalPage.js +94 -74
- package/dist/housingvista/pages/legal/LegalPage.js.map +1 -1
- package/dist/housingvista/pages/legal/LegalServiceDetailPage.js +301 -0
- package/dist/housingvista/pages/legal/LegalServiceDetailPage.js.map +1 -0
- package/dist/housingvista/pages/market/AreaInsightsPage.js +95 -86
- package/dist/housingvista/pages/market/AreaInsightsPage.js.map +1 -1
- package/dist/housingvista/pages/market/MarketAnalyticsPage.js +73 -64
- package/dist/housingvista/pages/market/MarketAnalyticsPage.js.map +1 -1
- package/dist/housingvista/pages/marketplace/MarketplacePage.js +102 -81
- package/dist/housingvista/pages/marketplace/MarketplacePage.js.map +1 -1
- package/dist/housingvista/pages/marketplace/ServiceDetailPage.js +317 -0
- package/dist/housingvista/pages/marketplace/ServiceDetailPage.js.map +1 -0
- package/dist/housingvista/pages/offers/OffersPage.js +306 -0
- package/dist/housingvista/pages/offers/OffersPage.js.map +1 -0
- package/dist/housingvista/pages/properties/AddPropertyPage.js +240 -225
- package/dist/housingvista/pages/properties/AddPropertyPage.js.map +1 -1
- package/dist/housingvista/pages/properties/PropertiesPage.js +178 -204
- package/dist/housingvista/pages/properties/PropertiesPage.js.map +1 -1
- package/dist/housingvista/pages/properties/PropertyDetailPage.js +648 -385
- package/dist/housingvista/pages/properties/PropertyDetailPage.js.map +1 -1
- package/dist/housingvista/pages/rental/RentalManagementPage.js +552 -309
- package/dist/housingvista/pages/rental/RentalManagementPage.js.map +1 -1
- package/dist/housingvista/pages/settings/ProfilePage.js +81 -144
- package/dist/housingvista/pages/settings/ProfilePage.js.map +1 -1
- package/dist/housingvista/pages/settings/SettingsPage.js +80 -143
- package/dist/housingvista/pages/settings/SettingsPage.js.map +1 -1
- package/dist/housingvista/pages/shortlist/ShortlistPage.js +32 -19
- package/dist/housingvista/pages/shortlist/ShortlistPage.js.map +1 -1
- package/dist/housingvista/pages/transactions/TransactionDetailPage.js +103 -124
- package/dist/housingvista/pages/transactions/TransactionDetailPage.js.map +1 -1
- package/dist/housingvista/pages/transactions/TransactionsPage.js +205 -201
- package/dist/housingvista/pages/transactions/TransactionsPage.js.map +1 -1
- package/dist/housingvista/pages/verification/VerificationDetailPage.js +352 -0
- package/dist/housingvista/pages/verification/VerificationDetailPage.js.map +1 -0
- package/dist/housingvista/pages/verification/VerificationPage.js +224 -97
- package/dist/housingvista/pages/verification/VerificationPage.js.map +1 -1
- package/dist/housingvista/pages/viewings/ViewingsPage.js +259 -0
- package/dist/housingvista/pages/viewings/ViewingsPage.js.map +1 -0
- package/dist/housingvista/utils/helpers.js +11 -1
- package/dist/housingvista/utils/helpers.js.map +1 -1
- package/package.json +1 -1
- package/dist/housingvista/pages/chat/ChatPage.js +0 -28
- package/dist/housingvista/pages/chat/ChatPage.js.map +0 -1
- package/dist/housingvista/pages/notifications/NotificationsPage.js +0 -28
- package/dist/housingvista/pages/notifications/NotificationsPage.js.map +0 -1
|
@@ -2,7 +2,7 @@ import { HousingVistaProvider as e } from "./context/HousingVistaContext.js";
|
|
|
2
2
|
import { ErrorBoundary as t } from "./components/ErrorBoundary.js";
|
|
3
3
|
import { HousingVistaRoutes as n } from "./HousingVistaRoutes.js";
|
|
4
4
|
import { useEffect as r } from "react";
|
|
5
|
-
import { ArrowLeftRight as i, BarChart3 as a,
|
|
5
|
+
import { ArrowLeftRight as i, BarChart3 as a, Building as o, Building2 as s, CalendarClock as c, Heart as l, Home as u, KeyRound as d, Landmark as f, LineChart as p, MapPin as m, Scale as h, Settings as g, ShieldCheck as _, Store as v, Tag as y, TrendingUp as b, Wrench as x } from "lucide-react";
|
|
6
6
|
import { jsx as S } from "react/jsx-runtime";
|
|
7
7
|
import { FeatureFlagProvider as C } from "@burdenoff/fe-libs/shared/feature-flags";
|
|
8
8
|
import { useI18n as w } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
|
|
@@ -26,7 +26,7 @@ var T = (T) => {
|
|
|
26
26
|
id: "housingvista-properties",
|
|
27
27
|
label: j("housingvista.nav.properties", "Properties"),
|
|
28
28
|
path: M(O, "properties"),
|
|
29
|
-
icon: /* @__PURE__ */ S(
|
|
29
|
+
icon: /* @__PURE__ */ S(s, { size: 20 }),
|
|
30
30
|
order: 10,
|
|
31
31
|
group: "properties"
|
|
32
32
|
},
|
|
@@ -54,6 +54,22 @@ var T = (T) => {
|
|
|
54
54
|
order: 12,
|
|
55
55
|
group: "transactions"
|
|
56
56
|
},
|
|
57
|
+
{
|
|
58
|
+
id: "housingvista-offers",
|
|
59
|
+
label: j("housingvista.nav.offers", "Offers"),
|
|
60
|
+
path: M(O, "offers"),
|
|
61
|
+
icon: /* @__PURE__ */ S(y, { size: 20 }),
|
|
62
|
+
order: 14,
|
|
63
|
+
group: "transactions"
|
|
64
|
+
},
|
|
65
|
+
{
|
|
66
|
+
id: "housingvista-viewings",
|
|
67
|
+
label: j("housingvista.nav.viewings", "Viewings"),
|
|
68
|
+
path: M(O, "viewings"),
|
|
69
|
+
icon: /* @__PURE__ */ S(c, { size: 20 }),
|
|
70
|
+
order: 15,
|
|
71
|
+
group: "properties"
|
|
72
|
+
},
|
|
57
73
|
{
|
|
58
74
|
id: "housingvista-rental",
|
|
59
75
|
label: j("housingvista.nav.rentalManagement", "Rental Mgmt"),
|
|
@@ -66,7 +82,7 @@ var T = (T) => {
|
|
|
66
82
|
id: "housingvista-assets",
|
|
67
83
|
label: j("housingvista.nav.assetManagement", "Asset Mgmt"),
|
|
68
84
|
path: M(O, "assets"),
|
|
69
|
-
icon: /* @__PURE__ */ S(
|
|
85
|
+
icon: /* @__PURE__ */ S(o, { size: 20 }),
|
|
70
86
|
order: 21,
|
|
71
87
|
group: "management"
|
|
72
88
|
},
|
|
@@ -82,7 +98,7 @@ var T = (T) => {
|
|
|
82
98
|
id: "housingvista-marketplace",
|
|
83
99
|
label: j("housingvista.nav.marketplace", "Marketplace"),
|
|
84
100
|
path: M(O, "marketplace"),
|
|
85
|
-
icon: /* @__PURE__ */ S(
|
|
101
|
+
icon: /* @__PURE__ */ S(v, { size: 20 }),
|
|
86
102
|
order: 30,
|
|
87
103
|
group: "services"
|
|
88
104
|
},
|
|
@@ -90,7 +106,7 @@ var T = (T) => {
|
|
|
90
106
|
id: "housingvista-legal",
|
|
91
107
|
label: j("housingvista.nav.legalServices", "Legal Services"),
|
|
92
108
|
path: M(O, "legal"),
|
|
93
|
-
icon: /* @__PURE__ */ S(
|
|
109
|
+
icon: /* @__PURE__ */ S(h, { size: 20 }),
|
|
94
110
|
order: 31,
|
|
95
111
|
group: "services"
|
|
96
112
|
},
|
|
@@ -130,31 +146,15 @@ var T = (T) => {
|
|
|
130
146
|
id: "housingvista-verification",
|
|
131
147
|
label: j("housingvista.nav.verification", "Verification"),
|
|
132
148
|
path: M(O, "verification"),
|
|
133
|
-
icon: /* @__PURE__ */ S(
|
|
149
|
+
icon: /* @__PURE__ */ S(_, { size: 20 }),
|
|
134
150
|
order: 50,
|
|
135
151
|
group: "tools"
|
|
136
152
|
},
|
|
137
|
-
{
|
|
138
|
-
id: "housingvista-chat",
|
|
139
|
-
label: j("housingvista.nav.chat", "Chat"),
|
|
140
|
-
path: M(O, "chat"),
|
|
141
|
-
icon: /* @__PURE__ */ S(h, { size: 20 }),
|
|
142
|
-
order: 51,
|
|
143
|
-
group: "tools"
|
|
144
|
-
},
|
|
145
|
-
{
|
|
146
|
-
id: "housingvista-notifications",
|
|
147
|
-
label: j("housingvista.nav.notifications", "Notifications"),
|
|
148
|
-
path: M(O, "notifications"),
|
|
149
|
-
icon: /* @__PURE__ */ S(o, { size: 20 }),
|
|
150
|
-
order: 52,
|
|
151
|
-
group: "tools"
|
|
152
|
-
},
|
|
153
153
|
{
|
|
154
154
|
id: "housingvista-settings",
|
|
155
155
|
label: j("housingvista.nav.settings", "Settings"),
|
|
156
156
|
path: M(O, "settings"),
|
|
157
|
-
icon: /* @__PURE__ */ S(
|
|
157
|
+
icon: /* @__PURE__ */ S(g, { size: 20 }),
|
|
158
158
|
order: 60,
|
|
159
159
|
group: "tools"
|
|
160
160
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HousingVistaRoot.js","names":[],"sources":["../../src/housingvista/HousingVistaRoot.tsx"],"sourcesContent":["/**\n * HousingVista Root Component\n * @module housingvista\n */\n\nimport type { FC } from 'react';\nimport { useEffect } from 'react';\nimport {\n Home,\n Building2,\n ArrowLeftRight,\n Heart,\n TrendingUp,\n KeyRound,\n Building,\n Wrench,\n Store,\n BarChart3,\n LineChart,\n MapPin,\n Scale,\n Landmark,\n ShieldCheck,\n MessageSquare,\n Bell,\n Settings,\n} from 'lucide-react';\nimport { HousingVistaProvider } from './context/HousingVistaContext';\nimport { FeatureFlagProvider } from '@burdenoff/fe-libs/shared/feature-flags';\nimport { useI18n } from '@burdenoff/fe-libs/shared/providers/shell/I18nProvider';\nimport { HousingVistaRoutes } from './HousingVistaRoutes';\nimport { ErrorBoundary } from './components/ErrorBoundary';\nimport type { HousingVistaRootProps, NavItem } from './types';\n\nexport const HousingVistaRoot: FC<HousingVistaRootProps> = (props) => {\n const { registerNavItems, registerFooterItems, basePath = '/', workspaceId = '' } = props;\n const { t } = useI18n();\n\n const tr = (key: string, fallback: string) => {\n const translated = t(key);\n return translated === key ? fallback : translated;\n };\n\n // Helper to join paths correctly\n const joinPath = (base: string, path: string): string => {\n const cleanBase = base.endsWith('/') ? base.slice(0, -1) : base;\n const cleanPath = path.startsWith('/') ? path : `/${path}`;\n return cleanBase + cleanPath;\n };\n\n // Register navigation items with shell on mount\n useEffect(() => {\n if (!registerNavItems) return;\n\n const navItems: NavItem[] = [\n // Dashboard\n {\n id: 'housingvista-dashboard',\n label: tr('housingvista.nav.dashboard', 'Dashboard'),\n path: joinPath(basePath, ''),\n icon: <Home size={20} />,\n order: 1,\n group: 'main',\n },\n\n // Properties\n {\n id: 'housingvista-properties',\n label: tr('housingvista.nav.properties', 'Properties'),\n path: joinPath(basePath, 'properties'),\n icon: <Building2 size={20} />,\n order: 10,\n group: 'properties',\n },\n\n // Shortlist\n {\n id: 'housingvista-shortlist',\n label: tr('housingvista.nav.shortlist', 'Shortlist'),\n path: joinPath(basePath, 'shortlist'),\n icon: <Heart size={20} />,\n order: 13,\n group: 'properties',\n },\n\n // Transactions\n {\n id: 'housingvista-transactions',\n label: tr('housingvista.nav.transactions', 'Transactions'),\n path: joinPath(basePath, 'transactions'),\n icon: <ArrowLeftRight size={20} />,\n order: 11,\n group: 'transactions',\n },\n\n // Investments\n {\n id: 'housingvista-investments',\n label: tr('housingvista.nav.investments', 'Investments'),\n path: joinPath(basePath, 'investments'),\n icon: <TrendingUp size={20} />,\n order: 12,\n group: 'transactions',\n },\n\n // Rental Management\n {\n id: 'housingvista-rental',\n label: tr('housingvista.nav.rentalManagement', 'Rental Mgmt'),\n path: joinPath(basePath, 'rental'),\n icon: <KeyRound size={20} />,\n order: 20,\n group: 'management',\n },\n\n // Asset Management\n {\n id: 'housingvista-assets',\n label: tr('housingvista.nav.assetManagement', 'Asset Mgmt'),\n path: joinPath(basePath, 'assets'),\n icon: <Building size={20} />,\n order: 21,\n group: 'management',\n },\n\n // AMC Management\n {\n id: 'housingvista-amc',\n label: tr('housingvista.nav.amcManagement', 'AMC Mgmt'),\n path: joinPath(basePath, 'amc'),\n icon: <Wrench size={20} />,\n order: 22,\n group: 'management',\n },\n\n // Marketplace\n {\n id: 'housingvista-marketplace',\n label: tr('housingvista.nav.marketplace', 'Marketplace'),\n path: joinPath(basePath, 'marketplace'),\n icon: <Store size={20} />,\n order: 30,\n group: 'services',\n },\n\n // Legal Services\n {\n id: 'housingvista-legal',\n label: tr('housingvista.nav.legalServices', 'Legal Services'),\n path: joinPath(basePath, 'legal'),\n icon: <Scale size={20} />,\n order: 31,\n group: 'services',\n },\n\n // Home Loans\n {\n id: 'housingvista-loans',\n label: tr('housingvista.nav.homeLoans', 'Home Loans'),\n path: joinPath(basePath, 'home-loans'),\n icon: <Landmark size={20} />,\n order: 32,\n group: 'services',\n },\n\n // Analytics\n {\n id: 'housingvista-analytics',\n label: tr('housingvista.nav.analytics', 'Analytics'),\n path: joinPath(basePath, 'analytics'),\n icon: <BarChart3 size={20} />,\n order: 40,\n group: 'analytics',\n },\n\n // Market Analytics\n {\n id: 'housingvista-market',\n label: tr('housingvista.nav.marketAnalytics', 'Market Analytics'),\n path: joinPath(basePath, 'market-analytics'),\n icon: <LineChart size={20} />,\n order: 41,\n group: 'analytics',\n },\n\n // Area Insights\n {\n id: 'housingvista-area',\n label: tr('housingvista.nav.areaInsights', 'Area Insights'),\n path: joinPath(basePath, 'area-insights'),\n icon: <MapPin size={20} />,\n order: 42,\n group: 'analytics',\n },\n\n // Verification\n {\n id: 'housingvista-verification',\n label: tr('housingvista.nav.verification', 'Verification'),\n path: joinPath(basePath, 'verification'),\n icon: <ShieldCheck size={20} />,\n order: 50,\n group: 'tools',\n },\n\n // Chat\n {\n id: 'housingvista-chat',\n label: tr('housingvista.nav.chat', 'Chat'),\n path: joinPath(basePath, 'chat'),\n icon: <MessageSquare size={20} />,\n order: 51,\n group: 'tools',\n },\n\n // Notifications\n {\n id: 'housingvista-notifications',\n label: tr('housingvista.nav.notifications', 'Notifications'),\n path: joinPath(basePath, 'notifications'),\n icon: <Bell size={20} />,\n order: 52,\n group: 'tools',\n },\n\n // Settings\n {\n id: 'housingvista-settings',\n label: tr('housingvista.nav.settings', 'Settings'),\n path: joinPath(basePath, 'settings'),\n icon: <Settings size={20} />,\n order: 60,\n group: 'tools',\n },\n ];\n\n const cleanup = registerNavItems(navItems);\n return cleanup;\n }, [basePath, registerNavItems, t]);\n\n // Register footer items\n useEffect(() => {\n if (!registerFooterItems) return;\n\n const footerItems = [\n {\n id: 'housingvista-status',\n label: tr('housingvista.footer.ready', 'HousingVista Ready'),\n type: 'status' as const,\n order: 10,\n section: 'left' as const,\n },\n ];\n\n const cleanup = registerFooterItems(footerItems);\n return cleanup;\n }, [registerFooterItems, t]);\n\n return (\n <FeatureFlagProvider workspaceId={workspaceId || null} gateway=\"global\" defaultEnabled={true}>\n <HousingVistaProvider {...props}>\n <ErrorBoundary>\n <HousingVistaRoutes />\n </ErrorBoundary>\n </HousingVistaProvider>\n </FeatureFlagProvider>\n );\n};\n"],"mappings":";;;;;;;;;AAkCA,IAAa,KAA+C,MAAU;CACpE,IAAM,EAAE,qBAAkB,wBAAqB,cAAW,KAAK,iBAAc,OAAO,GAC9E,EAAE,SAAM,GAAS,EAEjB,KAAM,GAAa,MAAqB;EAC5C,IAAM,IAAa,EAAE,EAAI;AACzB,SAAO,MAAe,IAAM,IAAW;IAInC,KAAY,GAAc,OACZ,EAAK,SAAS,IAAI,GAAG,EAAK,MAAM,GAAG,GAAG,GAAG,MACzC,EAAK,WAAW,IAAI,GAAG,IAAO,IAAI;AAoNtD,QA/MA,QAAgB;AACT,QAyLL,QADgB,EAtLY;GAE1B;IACE,IAAI;IACJ,OAAO,EAAG,8BAA8B,YAAY;IACpD,MAAM,EAAS,GAAU,GAAG;IAC5B,MAAM,kBAAC,GAAD,EAAM,MAAM,IAAM,CAAA;IACxB,OAAO;IACP,OAAO;IACR;GAGD;IACE,IAAI;IACJ,OAAO,EAAG,+BAA+B,aAAa;IACtD,MAAM,EAAS,GAAU,aAAa;IACtC,MAAM,kBAAC,GAAD,EAAW,MAAM,IAAM,CAAA;IAC7B,OAAO;IACP,OAAO;IACR;GAGD;IACE,IAAI;IACJ,OAAO,EAAG,8BAA8B,YAAY;IACpD,MAAM,EAAS,GAAU,YAAY;IACrC,MAAM,kBAAC,GAAD,EAAO,MAAM,IAAM,CAAA;IACzB,OAAO;IACP,OAAO;IACR;GAGD;IACE,IAAI;IACJ,OAAO,EAAG,iCAAiC,eAAe;IAC1D,MAAM,EAAS,GAAU,eAAe;IACxC,MAAM,kBAAC,GAAD,EAAgB,MAAM,IAAM,CAAA;IAClC,OAAO;IACP,OAAO;IACR;GAGD;IACE,IAAI;IACJ,OAAO,EAAG,gCAAgC,cAAc;IACxD,MAAM,EAAS,GAAU,cAAc;IACvC,MAAM,kBAAC,GAAD,EAAY,MAAM,IAAM,CAAA;IAC9B,OAAO;IACP,OAAO;IACR;GAGD;IACE,IAAI;IACJ,OAAO,EAAG,qCAAqC,cAAc;IAC7D,MAAM,EAAS,GAAU,SAAS;IAClC,MAAM,kBAAC,GAAD,EAAU,MAAM,IAAM,CAAA;IAC5B,OAAO;IACP,OAAO;IACR;GAGD;IACE,IAAI;IACJ,OAAO,EAAG,oCAAoC,aAAa;IAC3D,MAAM,EAAS,GAAU,SAAS;IAClC,MAAM,kBAAC,GAAD,EAAU,MAAM,IAAM,CAAA;IAC5B,OAAO;IACP,OAAO;IACR;GAGD;IACE,IAAI;IACJ,OAAO,EAAG,kCAAkC,WAAW;IACvD,MAAM,EAAS,GAAU,MAAM;IAC/B,MAAM,kBAAC,GAAD,EAAQ,MAAM,IAAM,CAAA;IAC1B,OAAO;IACP,OAAO;IACR;GAGD;IACE,IAAI;IACJ,OAAO,EAAG,gCAAgC,cAAc;IACxD,MAAM,EAAS,GAAU,cAAc;IACvC,MAAM,kBAAC,GAAD,EAAO,MAAM,IAAM,CAAA;IACzB,OAAO;IACP,OAAO;IACR;GAGD;IACE,IAAI;IACJ,OAAO,EAAG,kCAAkC,iBAAiB;IAC7D,MAAM,EAAS,GAAU,QAAQ;IACjC,MAAM,kBAAC,GAAD,EAAO,MAAM,IAAM,CAAA;IACzB,OAAO;IACP,OAAO;IACR;GAGD;IACE,IAAI;IACJ,OAAO,EAAG,8BAA8B,aAAa;IACrD,MAAM,EAAS,GAAU,aAAa;IACtC,MAAM,kBAAC,GAAD,EAAU,MAAM,IAAM,CAAA;IAC5B,OAAO;IACP,OAAO;IACR;GAGD;IACE,IAAI;IACJ,OAAO,EAAG,8BAA8B,YAAY;IACpD,MAAM,EAAS,GAAU,YAAY;IACrC,MAAM,kBAAC,GAAD,EAAW,MAAM,IAAM,CAAA;IAC7B,OAAO;IACP,OAAO;IACR;GAGD;IACE,IAAI;IACJ,OAAO,EAAG,oCAAoC,mBAAmB;IACjE,MAAM,EAAS,GAAU,mBAAmB;IAC5C,MAAM,kBAAC,GAAD,EAAW,MAAM,IAAM,CAAA;IAC7B,OAAO;IACP,OAAO;IACR;GAGD;IACE,IAAI;IACJ,OAAO,EAAG,iCAAiC,gBAAgB;IAC3D,MAAM,EAAS,GAAU,gBAAgB;IACzC,MAAM,kBAAC,GAAD,EAAQ,MAAM,IAAM,CAAA;IAC1B,OAAO;IACP,OAAO;IACR;GAGD;IACE,IAAI;IACJ,OAAO,EAAG,iCAAiC,eAAe;IAC1D,MAAM,EAAS,GAAU,eAAe;IACxC,MAAM,kBAAC,GAAD,EAAa,MAAM,IAAM,CAAA;IAC/B,OAAO;IACP,OAAO;IACR;GAGD;IACE,IAAI;IACJ,OAAO,EAAG,yBAAyB,OAAO;IAC1C,MAAM,EAAS,GAAU,OAAO;IAChC,MAAM,kBAAC,GAAD,EAAe,MAAM,IAAM,CAAA;IACjC,OAAO;IACP,OAAO;IACR;GAGD;IACE,IAAI;IACJ,OAAO,EAAG,kCAAkC,gBAAgB;IAC5D,MAAM,EAAS,GAAU,gBAAgB;IACzC,MAAM,kBAAC,GAAD,EAAM,MAAM,IAAM,CAAA;IACxB,OAAO;IACP,OAAO;IACR;GAGD;IACE,IAAI;IACJ,OAAO,EAAG,6BAA6B,WAAW;IAClD,MAAM,EAAS,GAAU,WAAW;IACpC,MAAM,kBAAC,GAAD,EAAU,MAAM,IAAM,CAAA;IAC5B,OAAO;IACP,OAAO;IACR;GACF,CAEyC;IAEzC;EAAC;EAAU;EAAkB;EAAE,CAAC,EAGnC,QAAgB;AACT,QAaL,QADgB,EAVI,CAClB;GACE,IAAI;GACJ,OAAO,EAAG,6BAA6B,qBAAqB;GAC5D,MAAM;GACN,OAAO;GACP,SAAS;GACV,CACF,CAE+C;IAE/C,CAAC,GAAqB,EAAE,CAAC,EAG1B,kBAAC,GAAD;EAAqB,aAAa,KAAe;EAAM,SAAQ;EAAS,gBAAgB;YACtF,kBAAC,GAAD;GAAsB,GAAI;aACxB,kBAAC,GAAD,EAAA,UACE,kBAAC,GAAD,EAAsB,CAAA,EACR,CAAA;GACK,CAAA;EACH,CAAA"}
|
|
1
|
+
{"version":3,"file":"HousingVistaRoot.js","names":[],"sources":["../../src/housingvista/HousingVistaRoot.tsx"],"sourcesContent":["/**\n * HousingVista Root Component\n * @module housingvista\n */\n\nimport type { FC } from 'react';\nimport { useEffect } from 'react';\nimport {\n Home,\n Building2,\n ArrowLeftRight,\n Heart,\n TrendingUp,\n KeyRound,\n Building,\n Wrench,\n Store,\n BarChart3,\n LineChart,\n MapPin,\n Scale,\n Landmark,\n ShieldCheck,\n Tag,\n CalendarClock,\n Settings,\n} from 'lucide-react';\nimport { HousingVistaProvider } from './context/HousingVistaContext';\nimport { FeatureFlagProvider } from '@burdenoff/fe-libs/shared/feature-flags';\nimport { useI18n } from '@burdenoff/fe-libs/shared/providers/shell/I18nProvider';\nimport { HousingVistaRoutes } from './HousingVistaRoutes';\nimport { ErrorBoundary } from './components/ErrorBoundary';\nimport type { HousingVistaRootProps, NavItem } from './types';\n\nexport const HousingVistaRoot: FC<HousingVistaRootProps> = (props) => {\n const { registerNavItems, registerFooterItems, basePath = '/', workspaceId = '' } = props;\n const { t } = useI18n();\n\n const tr = (key: string, fallback: string) => {\n const translated = t(key);\n return translated === key ? fallback : translated;\n };\n\n // Helper to join paths correctly\n const joinPath = (base: string, path: string): string => {\n const cleanBase = base.endsWith('/') ? base.slice(0, -1) : base;\n const cleanPath = path.startsWith('/') ? path : `/${path}`;\n return cleanBase + cleanPath;\n };\n\n // Register navigation items with shell on mount\n useEffect(() => {\n if (!registerNavItems) return;\n\n const navItems: NavItem[] = [\n // Dashboard\n {\n id: 'housingvista-dashboard',\n label: tr('housingvista.nav.dashboard', 'Dashboard'),\n path: joinPath(basePath, ''),\n icon: <Home size={20} />,\n order: 1,\n group: 'main',\n },\n\n // Properties\n {\n id: 'housingvista-properties',\n label: tr('housingvista.nav.properties', 'Properties'),\n path: joinPath(basePath, 'properties'),\n icon: <Building2 size={20} />,\n order: 10,\n group: 'properties',\n },\n\n // Shortlist\n {\n id: 'housingvista-shortlist',\n label: tr('housingvista.nav.shortlist', 'Shortlist'),\n path: joinPath(basePath, 'shortlist'),\n icon: <Heart size={20} />,\n order: 13,\n group: 'properties',\n },\n\n // Transactions\n {\n id: 'housingvista-transactions',\n label: tr('housingvista.nav.transactions', 'Transactions'),\n path: joinPath(basePath, 'transactions'),\n icon: <ArrowLeftRight size={20} />,\n order: 11,\n group: 'transactions',\n },\n\n // Investments\n {\n id: 'housingvista-investments',\n label: tr('housingvista.nav.investments', 'Investments'),\n path: joinPath(basePath, 'investments'),\n icon: <TrendingUp size={20} />,\n order: 12,\n group: 'transactions',\n },\n\n // Offers\n {\n id: 'housingvista-offers',\n label: tr('housingvista.nav.offers', 'Offers'),\n path: joinPath(basePath, 'offers'),\n icon: <Tag size={20} />,\n order: 14,\n group: 'transactions',\n },\n\n // Viewings\n {\n id: 'housingvista-viewings',\n label: tr('housingvista.nav.viewings', 'Viewings'),\n path: joinPath(basePath, 'viewings'),\n icon: <CalendarClock size={20} />,\n order: 15,\n group: 'properties',\n },\n\n // Rental Management\n {\n id: 'housingvista-rental',\n label: tr('housingvista.nav.rentalManagement', 'Rental Mgmt'),\n path: joinPath(basePath, 'rental'),\n icon: <KeyRound size={20} />,\n order: 20,\n group: 'management',\n },\n\n // Asset Management\n {\n id: 'housingvista-assets',\n label: tr('housingvista.nav.assetManagement', 'Asset Mgmt'),\n path: joinPath(basePath, 'assets'),\n icon: <Building size={20} />,\n order: 21,\n group: 'management',\n },\n\n // AMC Management\n {\n id: 'housingvista-amc',\n label: tr('housingvista.nav.amcManagement', 'AMC Mgmt'),\n path: joinPath(basePath, 'amc'),\n icon: <Wrench size={20} />,\n order: 22,\n group: 'management',\n },\n\n // Marketplace\n {\n id: 'housingvista-marketplace',\n label: tr('housingvista.nav.marketplace', 'Marketplace'),\n path: joinPath(basePath, 'marketplace'),\n icon: <Store size={20} />,\n order: 30,\n group: 'services',\n },\n\n // Legal Services\n {\n id: 'housingvista-legal',\n label: tr('housingvista.nav.legalServices', 'Legal Services'),\n path: joinPath(basePath, 'legal'),\n icon: <Scale size={20} />,\n order: 31,\n group: 'services',\n },\n\n // Home Loans\n {\n id: 'housingvista-loans',\n label: tr('housingvista.nav.homeLoans', 'Home Loans'),\n path: joinPath(basePath, 'home-loans'),\n icon: <Landmark size={20} />,\n order: 32,\n group: 'services',\n },\n\n // Analytics\n {\n id: 'housingvista-analytics',\n label: tr('housingvista.nav.analytics', 'Analytics'),\n path: joinPath(basePath, 'analytics'),\n icon: <BarChart3 size={20} />,\n order: 40,\n group: 'analytics',\n },\n\n // Market Analytics\n {\n id: 'housingvista-market',\n label: tr('housingvista.nav.marketAnalytics', 'Market Analytics'),\n path: joinPath(basePath, 'market-analytics'),\n icon: <LineChart size={20} />,\n order: 41,\n group: 'analytics',\n },\n\n // Area Insights\n {\n id: 'housingvista-area',\n label: tr('housingvista.nav.areaInsights', 'Area Insights'),\n path: joinPath(basePath, 'area-insights'),\n icon: <MapPin size={20} />,\n order: 42,\n group: 'analytics',\n },\n\n // Verification\n {\n id: 'housingvista-verification',\n label: tr('housingvista.nav.verification', 'Verification'),\n path: joinPath(basePath, 'verification'),\n icon: <ShieldCheck size={20} />,\n order: 50,\n group: 'tools',\n },\n\n // Settings\n {\n id: 'housingvista-settings',\n label: tr('housingvista.nav.settings', 'Settings'),\n path: joinPath(basePath, 'settings'),\n icon: <Settings size={20} />,\n order: 60,\n group: 'tools',\n },\n ];\n\n const cleanup = registerNavItems(navItems);\n return cleanup;\n }, [basePath, registerNavItems, t]);\n\n // Register footer items\n useEffect(() => {\n if (!registerFooterItems) return;\n\n const footerItems = [\n {\n id: 'housingvista-status',\n label: tr('housingvista.footer.ready', 'HousingVista Ready'),\n type: 'status' as const,\n order: 10,\n section: 'left' as const,\n },\n ];\n\n const cleanup = registerFooterItems(footerItems);\n return cleanup;\n }, [registerFooterItems, t]);\n\n return (\n <FeatureFlagProvider workspaceId={workspaceId || null} gateway=\"global\" defaultEnabled={true}>\n <HousingVistaProvider {...props}>\n <ErrorBoundary>\n <HousingVistaRoutes />\n </ErrorBoundary>\n </HousingVistaProvider>\n </FeatureFlagProvider>\n );\n};\n"],"mappings":"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"}
|
|
@@ -9,8 +9,8 @@ var c = () => /* @__PURE__ */ o("div", {
|
|
|
9
9
|
className: "text-sm text-text-secondary",
|
|
10
10
|
children: "Loading..."
|
|
11
11
|
})
|
|
12
|
-
}), l = n(() => import("./pages/properties/PropertiesPage.js").then((e) => ({ default: e.PropertiesPage }))), u = n(() => import("./pages/properties/AddPropertyPage.js").then((e) => ({ default: e.AddPropertyPage }))), d = n(() => import("./pages/properties/PropertyDetailPage.js").then((e) => ({ default: e.PropertyDetailPage }))), f = n(() => import("./pages/shortlist/ShortlistPage.js").then((e) => ({ default: e.ShortlistPage }))), p = n(() => import("./pages/transactions/TransactionsPage.js").then((e) => ({ default: e.TransactionsPage }))), m = n(() => import("./pages/transactions/TransactionDetailPage.js").then((e) => ({ default: e.TransactionDetailPage }))), h = n(() => import("./pages/investments/InvestmentsPage.js").then((e) => ({ default: e.InvestmentsPage }))), g = n(() => import("./pages/investments/InvestmentDetailPage.js").then((e) => ({ default: e.InvestmentDetailPage }))), _ = n(() => import("./pages/analytics/AnalyticsPage.js").then((e) => ({ default: e.AnalyticsPage }))),
|
|
13
|
-
function
|
|
12
|
+
}), l = n(() => import("./pages/properties/PropertiesPage.js").then((e) => ({ default: e.PropertiesPage }))), u = n(() => import("./pages/properties/AddPropertyPage.js").then((e) => ({ default: e.AddPropertyPage }))), d = n(() => import("./pages/properties/PropertyDetailPage.js").then((e) => ({ default: e.PropertyDetailPage }))), f = n(() => import("./pages/shortlist/ShortlistPage.js").then((e) => ({ default: e.ShortlistPage }))), p = n(() => import("./pages/transactions/TransactionsPage.js").then((e) => ({ default: e.TransactionsPage }))), m = n(() => import("./pages/transactions/TransactionDetailPage.js").then((e) => ({ default: e.TransactionDetailPage }))), h = n(() => import("./pages/investments/InvestmentsPage.js").then((e) => ({ default: e.InvestmentsPage }))), g = n(() => import("./pages/investments/InvestmentDetailPage.js").then((e) => ({ default: e.InvestmentDetailPage }))), _ = n(() => import("./pages/offers/OffersPage.js").then((e) => ({ default: e.OffersPage }))), v = n(() => import("./pages/viewings/ViewingsPage.js").then((e) => ({ default: e.ViewingsPage }))), y = n(() => import("./pages/analytics/AnalyticsPage.js").then((e) => ({ default: e.AnalyticsPage }))), b = n(() => import("./pages/rental/RentalManagementPage.js").then((e) => ({ default: e.RentalManagementPage }))), x = n(() => import("./pages/assets/AssetManagementPage.js").then((e) => ({ default: e.AssetManagementPage }))), S = n(() => import("./pages/assets/AssetDetailPage.js").then((e) => ({ default: e.AssetDetailPage }))), C = n(() => import("./pages/amc/AMCManagementPage.js").then((e) => ({ default: e.AMCManagementPage }))), w = n(() => import("./pages/marketplace/MarketplacePage.js").then((e) => ({ default: e.MarketplacePage }))), T = n(() => import("./pages/marketplace/ServiceDetailPage.js").then((e) => ({ default: e.ServiceDetailPage }))), E = n(() => import("./pages/verification/VerificationPage.js").then((e) => ({ default: e.VerificationPage }))), D = n(() => import("./pages/verification/VerificationDetailPage.js").then((e) => ({ default: e.VerificationDetailPage }))), O = n(() => import("./pages/legal/LegalPage.js").then((e) => ({ default: e.LegalPage }))), k = n(() => import("./pages/legal/LegalServiceDetailPage.js").then((e) => ({ default: e.LegalServiceDetailPage }))), A = n(() => import("./pages/finance/HomeLoansPage.js").then((e) => ({ default: e.HomeLoansPage }))), j = n(() => import("./pages/finance/HomeLoanDetailPage.js").then((e) => ({ default: e.HomeLoanDetailPage }))), M = n(() => import("./pages/market/MarketAnalyticsPage.js").then((e) => ({ default: e.MarketAnalyticsPage }))), N = n(() => import("./pages/market/AreaInsightsPage.js").then((e) => ({ default: e.AreaInsightsPage }))), P = n(() => import("./pages/settings/SettingsPage.js").then((e) => ({ default: e.SettingsPage }))), F = n(() => import("./pages/settings/ProfilePage.js").then((e) => ({ default: e.ProfilePage })));
|
|
13
|
+
function I() {
|
|
14
14
|
return /* @__PURE__ */ o(t, {
|
|
15
15
|
fallback: /* @__PURE__ */ o(c, {}),
|
|
16
16
|
children: /* @__PURE__ */ s(a, { children: [
|
|
@@ -51,61 +51,81 @@ function j() {
|
|
|
51
51
|
element: /* @__PURE__ */ o(g, {})
|
|
52
52
|
}),
|
|
53
53
|
/* @__PURE__ */ o(i, {
|
|
54
|
-
path: "
|
|
54
|
+
path: "offers",
|
|
55
55
|
element: /* @__PURE__ */ o(_, {})
|
|
56
56
|
}),
|
|
57
57
|
/* @__PURE__ */ o(i, {
|
|
58
|
-
path: "
|
|
58
|
+
path: "viewings",
|
|
59
59
|
element: /* @__PURE__ */ o(v, {})
|
|
60
60
|
}),
|
|
61
61
|
/* @__PURE__ */ o(i, {
|
|
62
|
-
path: "
|
|
62
|
+
path: "analytics",
|
|
63
63
|
element: /* @__PURE__ */ o(y, {})
|
|
64
64
|
}),
|
|
65
65
|
/* @__PURE__ */ o(i, {
|
|
66
|
-
path: "
|
|
66
|
+
path: "rental",
|
|
67
67
|
element: /* @__PURE__ */ o(b, {})
|
|
68
68
|
}),
|
|
69
69
|
/* @__PURE__ */ o(i, {
|
|
70
|
-
path: "
|
|
70
|
+
path: "assets",
|
|
71
71
|
element: /* @__PURE__ */ o(x, {})
|
|
72
72
|
}),
|
|
73
73
|
/* @__PURE__ */ o(i, {
|
|
74
|
-
path: "
|
|
74
|
+
path: "assets/:id",
|
|
75
75
|
element: /* @__PURE__ */ o(S, {})
|
|
76
76
|
}),
|
|
77
77
|
/* @__PURE__ */ o(i, {
|
|
78
|
-
path: "
|
|
78
|
+
path: "amc",
|
|
79
79
|
element: /* @__PURE__ */ o(C, {})
|
|
80
80
|
}),
|
|
81
81
|
/* @__PURE__ */ o(i, {
|
|
82
|
-
path: "
|
|
82
|
+
path: "marketplace",
|
|
83
83
|
element: /* @__PURE__ */ o(w, {})
|
|
84
84
|
}),
|
|
85
85
|
/* @__PURE__ */ o(i, {
|
|
86
|
-
path: "
|
|
86
|
+
path: "marketplace/:id",
|
|
87
87
|
element: /* @__PURE__ */ o(T, {})
|
|
88
88
|
}),
|
|
89
89
|
/* @__PURE__ */ o(i, {
|
|
90
|
-
path: "
|
|
90
|
+
path: "verification",
|
|
91
91
|
element: /* @__PURE__ */ o(E, {})
|
|
92
92
|
}),
|
|
93
93
|
/* @__PURE__ */ o(i, {
|
|
94
|
-
path: "
|
|
94
|
+
path: "verification/:id",
|
|
95
95
|
element: /* @__PURE__ */ o(D, {})
|
|
96
96
|
}),
|
|
97
97
|
/* @__PURE__ */ o(i, {
|
|
98
|
-
path: "
|
|
98
|
+
path: "legal",
|
|
99
99
|
element: /* @__PURE__ */ o(O, {})
|
|
100
100
|
}),
|
|
101
101
|
/* @__PURE__ */ o(i, {
|
|
102
|
-
path: "
|
|
102
|
+
path: "legal/:id",
|
|
103
103
|
element: /* @__PURE__ */ o(k, {})
|
|
104
104
|
}),
|
|
105
105
|
/* @__PURE__ */ o(i, {
|
|
106
|
-
path: "
|
|
106
|
+
path: "home-loans",
|
|
107
107
|
element: /* @__PURE__ */ o(A, {})
|
|
108
108
|
}),
|
|
109
|
+
/* @__PURE__ */ o(i, {
|
|
110
|
+
path: "home-loans/:id/apply",
|
|
111
|
+
element: /* @__PURE__ */ o(j, {})
|
|
112
|
+
}),
|
|
113
|
+
/* @__PURE__ */ o(i, {
|
|
114
|
+
path: "market-analytics",
|
|
115
|
+
element: /* @__PURE__ */ o(M, {})
|
|
116
|
+
}),
|
|
117
|
+
/* @__PURE__ */ o(i, {
|
|
118
|
+
path: "area-insights",
|
|
119
|
+
element: /* @__PURE__ */ o(N, {})
|
|
120
|
+
}),
|
|
121
|
+
/* @__PURE__ */ o(i, {
|
|
122
|
+
path: "settings",
|
|
123
|
+
element: /* @__PURE__ */ o(P, {})
|
|
124
|
+
}),
|
|
125
|
+
/* @__PURE__ */ o(i, {
|
|
126
|
+
path: "profile",
|
|
127
|
+
element: /* @__PURE__ */ o(F, {})
|
|
128
|
+
}),
|
|
109
129
|
/* @__PURE__ */ o(i, {
|
|
110
130
|
path: "*",
|
|
111
131
|
element: /* @__PURE__ */ o(r, {
|
|
@@ -117,6 +137,6 @@ function j() {
|
|
|
117
137
|
});
|
|
118
138
|
}
|
|
119
139
|
//#endregion
|
|
120
|
-
export {
|
|
140
|
+
export { I as HousingVistaRoutes };
|
|
121
141
|
|
|
122
142
|
//# sourceMappingURL=HousingVistaRoutes.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HousingVistaRoutes.js","names":[],"sources":["../../src/housingvista/HousingVistaRoutes.tsx"],"sourcesContent":["/**\n * HousingVista Routes\n * All route definitions with lazy loading.\n * @module housingvista\n */\n\nimport { lazy, Suspense } from 'react';\nimport { Routes, Route, Navigate } from 'react-router-dom';\n\n// Eagerly load the home page\nimport { HomePage } from './pages/HomePage';\n\n// Loading fallback\nconst PageLoader = () => (\n <div className=\"flex items-center justify-center p-12\">\n <div className=\"text-sm text-text-secondary\">Loading...</div>\n </div>\n);\n\n// ── Properties ──────────────────────────────────────────────────────────────\nconst PropertiesPage = lazy(() =>\n import('./pages/properties/PropertiesPage').then((m) => ({ default: m.PropertiesPage }))\n);\nconst AddPropertyPage = lazy(() =>\n import('./pages/properties/AddPropertyPage').then((m) => ({ default: m.AddPropertyPage }))\n);\nconst PropertyDetailPage = lazy(() =>\n import('./pages/properties/PropertyDetailPage').then((m) => ({ default: m.PropertyDetailPage }))\n);\nconst ShortlistPage = lazy(() => import('./pages/shortlist/ShortlistPage').then((m) => ({ default: m.ShortlistPage })));\n\n// ── Transactions ────────────────────────────────────────────────────────────\nconst TransactionsPage = lazy(() =>\n import('./pages/transactions/TransactionsPage').then((m) => ({ default: m.TransactionsPage }))\n);\nconst TransactionDetailPage = lazy(() =>\n import('./pages/transactions/TransactionDetailPage').then((m) => ({ default: m.TransactionDetailPage }))\n);\n\n// ── Investments ─────────────────────────────────────────────────────────────\nconst InvestmentsPage = lazy(() =>\n import('./pages/investments/InvestmentsPage').then((m) => ({ default: m.InvestmentsPage }))\n);\nconst InvestmentDetailPage = lazy(() =>\n import('./pages/investments/InvestmentDetailPage').then((m) => ({ default: m.InvestmentDetailPage }))\n);\n\n// ── Analytics ───────────────────────────────────────────────────────────────\nconst AnalyticsPage = lazy(() => import('./pages/analytics/AnalyticsPage').then((m) => ({ default: m.AnalyticsPage })));\n\n// ── Rental Management ───────────────────────────────────────────────────────\nconst RentalManagementPage = lazy(() =>\n import('./pages/rental/RentalManagementPage').then((m) => ({ default: m.RentalManagementPage }))\n);\n\n// ── Asset Management ────────────────────────────────────────────────────────\nconst AssetManagementPage = lazy(() =>\n import('./pages/assets/AssetManagementPage').then((m) => ({ default: m.AssetManagementPage }))\n);\n\n// ── AMC Management ──────────────────────────────────────────────────────────\nconst AMCManagementPage = lazy(() =>\n import('./pages/amc/AMCManagementPage').then((m) => ({ default: m.AMCManagementPage }))\n);\n\n// ── Marketplace ─────────────────────────────────────────────────────────────\nconst MarketplacePage = lazy(() =>\n import('./pages/marketplace/MarketplacePage').then((m) => ({ default: m.MarketplacePage }))\n);\n\n// ── Chat ────────────────────────────────────────────────────────────────────\nconst ChatPage = lazy(() => import('./pages/chat/ChatPage').then((m) => ({ default: m.ChatPage })));\n\n// ── Notifications ───────────────────────────────────────────────────────────\nconst NotificationsPage = lazy(() =>\n import('./pages/notifications/NotificationsPage').then((m) => ({ default: m.NotificationsPage }))\n);\n\n// ── Verification ────────────────────────────────────────────────────────────\nconst VerificationPage = lazy(() =>\n import('./pages/verification/VerificationPage').then((m) => ({ default: m.VerificationPage }))\n);\n\n// ── Legal ───────────────────────────────────────────────────────────────────\nconst LegalPage = lazy(() => import('./pages/legal/LegalPage').then((m) => ({ default: m.LegalPage })));\n\n// ── Finance ─────────────────────────────────────────────────────────────────\nconst HomeLoansPage = lazy(() => import('./pages/finance/HomeLoansPage').then((m) => ({ default: m.HomeLoansPage })));\n\n// ── Market ──────────────────────────────────────────────────────────────────\nconst MarketAnalyticsPage = lazy(() =>\n import('./pages/market/MarketAnalyticsPage').then((m) => ({ default: m.MarketAnalyticsPage }))\n);\nconst AreaInsightsPage = lazy(() =>\n import('./pages/market/AreaInsightsPage').then((m) => ({ default: m.AreaInsightsPage }))\n);\n\n// ── Settings ────────────────────────────────────────────────────────────────\nconst SettingsPage = lazy(() => import('./pages/settings/SettingsPage').then((m) => ({ default: m.SettingsPage })));\nconst ProfilePage = lazy(() => import('./pages/settings/ProfilePage').then((m) => ({ default: m.ProfilePage })));\n\n// ============================================================================\n// Routes\n// ============================================================================\n\nexport function HousingVistaRoutes() {\n return (\n <Suspense fallback={<PageLoader />}>\n <Routes>\n {/* Dashboard */}\n <Route index element={<HomePage />} />\n\n {/* Properties */}\n <Route path=\"properties\" element={<PropertiesPage />} />\n <Route path=\"properties/new\" element={<AddPropertyPage />} />\n <Route path=\"properties/:id\" element={<PropertyDetailPage />} />\n\n {/* Shortlist */}\n <Route path=\"shortlist\" element={<ShortlistPage />} />\n\n {/* Transactions */}\n <Route path=\"transactions\" element={<TransactionsPage />} />\n <Route path=\"transactions/:id\" element={<TransactionDetailPage />} />\n\n {/* Investments */}\n <Route path=\"investments\" element={<InvestmentsPage />} />\n <Route path=\"investments/:id\" element={<InvestmentDetailPage />} />\n\n {/* Analytics */}\n <Route path=\"analytics\" element={<AnalyticsPage />} />\n\n {/* Rental Management */}\n <Route path=\"rental\" element={<RentalManagementPage />} />\n\n {/* Asset Management */}\n <Route path=\"assets\" element={<AssetManagementPage />} />\n\n {/* AMC Management */}\n <Route path=\"amc\" element={<AMCManagementPage />} />\n\n {/* Marketplace */}\n <Route path=\"marketplace\" element={<MarketplacePage />} />\n\n {/* Chat */}\n <Route path=\"chat\" element={<ChatPage />} />\n\n {/* Notifications */}\n <Route path=\"notifications\" element={<NotificationsPage />} />\n\n {/* Verification */}\n <Route path=\"verification\" element={<VerificationPage />} />\n\n {/* Legal */}\n <Route path=\"legal\" element={<LegalPage />} />\n\n {/* Home Loans */}\n <Route path=\"home-loans\" element={<HomeLoansPage />} />\n\n {/* Market Analytics */}\n <Route path=\"market-analytics\" element={<MarketAnalyticsPage />} />\n <Route path=\"area-insights\" element={<AreaInsightsPage />} />\n\n {/* Settings & Profile */}\n <Route path=\"settings\" element={<SettingsPage />} />\n <Route path=\"profile\" element={<ProfilePage />} />\n\n {/* Catch-all: redirect to dashboard */}\n <Route path=\"*\" element={<Navigate to=\"\" replace />} />\n </Routes>\n </Suspense>\n );\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"HousingVistaRoutes.js","names":[],"sources":["../../src/housingvista/HousingVistaRoutes.tsx"],"sourcesContent":["/**\n * HousingVista Routes\n * All route definitions with lazy loading.\n * @module housingvista\n */\n\nimport { lazy, Suspense } from 'react';\nimport { Routes, Route, Navigate } from 'react-router-dom';\n\n// Eagerly load the home page\nimport { HomePage } from './pages/HomePage';\n\n// Loading fallback\nconst PageLoader = () => (\n <div className=\"flex items-center justify-center p-12\">\n <div className=\"text-sm text-text-secondary\">Loading...</div>\n </div>\n);\n\n// ── Properties ──────────────────────────────────────────────────────────────\nconst PropertiesPage = lazy(() =>\n import('./pages/properties/PropertiesPage').then((m) => ({ default: m.PropertiesPage }))\n);\nconst AddPropertyPage = lazy(() =>\n import('./pages/properties/AddPropertyPage').then((m) => ({ default: m.AddPropertyPage }))\n);\nconst PropertyDetailPage = lazy(() =>\n import('./pages/properties/PropertyDetailPage').then((m) => ({ default: m.PropertyDetailPage }))\n);\nconst ShortlistPage = lazy(() => import('./pages/shortlist/ShortlistPage').then((m) => ({ default: m.ShortlistPage })));\n\n// ── Transactions ────────────────────────────────────────────────────────────\nconst TransactionsPage = lazy(() =>\n import('./pages/transactions/TransactionsPage').then((m) => ({ default: m.TransactionsPage }))\n);\nconst TransactionDetailPage = lazy(() =>\n import('./pages/transactions/TransactionDetailPage').then((m) => ({ default: m.TransactionDetailPage }))\n);\n\n// ── Investments ─────────────────────────────────────────────────────────────\nconst InvestmentsPage = lazy(() =>\n import('./pages/investments/InvestmentsPage').then((m) => ({ default: m.InvestmentsPage }))\n);\nconst InvestmentDetailPage = lazy(() =>\n import('./pages/investments/InvestmentDetailPage').then((m) => ({ default: m.InvestmentDetailPage }))\n);\n\n// ── Offers ──────────────────────────────────────────────────────────────────\nconst OffersPage = lazy(() => import('./pages/offers/OffersPage').then((m) => ({ default: m.OffersPage })));\n\n// ── Viewings ────────────────────────────────────────────────────────────────\nconst ViewingsPage = lazy(() =>\n import('./pages/viewings/ViewingsPage').then((m) => ({ default: m.ViewingsPage }))\n);\n\n// ── Analytics ───────────────────────────────────────────────────────────────\nconst AnalyticsPage = lazy(() => import('./pages/analytics/AnalyticsPage').then((m) => ({ default: m.AnalyticsPage })));\n\n// ── Rental Management ───────────────────────────────────────────────────────\nconst RentalManagementPage = lazy(() =>\n import('./pages/rental/RentalManagementPage').then((m) => ({ default: m.RentalManagementPage }))\n);\n\n// ── Asset Management ────────────────────────────────────────────────────────\nconst AssetManagementPage = lazy(() =>\n import('./pages/assets/AssetManagementPage').then((m) => ({ default: m.AssetManagementPage }))\n);\nconst AssetDetailPage = lazy(() =>\n import('./pages/assets/AssetDetailPage').then((m) => ({ default: m.AssetDetailPage }))\n);\n\n// ── AMC Management ──────────────────────────────────────────────────────────\nconst AMCManagementPage = lazy(() =>\n import('./pages/amc/AMCManagementPage').then((m) => ({ default: m.AMCManagementPage }))\n);\n\n// ── Marketplace ─────────────────────────────────────────────────────────────\nconst MarketplacePage = lazy(() =>\n import('./pages/marketplace/MarketplacePage').then((m) => ({ default: m.MarketplacePage }))\n);\nconst ServiceDetailPage = lazy(() =>\n import('./pages/marketplace/ServiceDetailPage').then((m) => ({ default: m.ServiceDetailPage }))\n);\n\n// ── Verification ────────────────────────────────────────────────────────────\nconst VerificationPage = lazy(() =>\n import('./pages/verification/VerificationPage').then((m) => ({ default: m.VerificationPage }))\n);\nconst VerificationDetailPage = lazy(() =>\n import('./pages/verification/VerificationDetailPage').then((m) => ({ default: m.VerificationDetailPage }))\n);\n\n// ── Legal ───────────────────────────────────────────────────────────────────\nconst LegalPage = lazy(() => import('./pages/legal/LegalPage').then((m) => ({ default: m.LegalPage })));\nconst LegalServiceDetailPage = lazy(() =>\n import('./pages/legal/LegalServiceDetailPage').then((m) => ({ default: m.LegalServiceDetailPage }))\n);\n\n// ── Finance ─────────────────────────────────────────────────────────────────\nconst HomeLoansPage = lazy(() => import('./pages/finance/HomeLoansPage').then((m) => ({ default: m.HomeLoansPage })));\nconst HomeLoanDetailPage = lazy(() =>\n import('./pages/finance/HomeLoanDetailPage').then((m) => ({ default: m.HomeLoanDetailPage }))\n);\n\n// ── Market ──────────────────────────────────────────────────────────────────\nconst MarketAnalyticsPage = lazy(() =>\n import('./pages/market/MarketAnalyticsPage').then((m) => ({ default: m.MarketAnalyticsPage }))\n);\nconst AreaInsightsPage = lazy(() =>\n import('./pages/market/AreaInsightsPage').then((m) => ({ default: m.AreaInsightsPage }))\n);\n\n// ── Settings ────────────────────────────────────────────────────────────────\nconst SettingsPage = lazy(() => import('./pages/settings/SettingsPage').then((m) => ({ default: m.SettingsPage })));\nconst ProfilePage = lazy(() => import('./pages/settings/ProfilePage').then((m) => ({ default: m.ProfilePage })));\n\n// ============================================================================\n// Routes\n// ============================================================================\n\nexport function HousingVistaRoutes() {\n return (\n <Suspense fallback={<PageLoader />}>\n <Routes>\n {/* Dashboard */}\n <Route index element={<HomePage />} />\n\n {/* Properties */}\n <Route path=\"properties\" element={<PropertiesPage />} />\n <Route path=\"properties/new\" element={<AddPropertyPage />} />\n <Route path=\"properties/:id\" element={<PropertyDetailPage />} />\n\n {/* Shortlist */}\n <Route path=\"shortlist\" element={<ShortlistPage />} />\n\n {/* Transactions */}\n <Route path=\"transactions\" element={<TransactionsPage />} />\n <Route path=\"transactions/:id\" element={<TransactionDetailPage />} />\n\n {/* Investments */}\n <Route path=\"investments\" element={<InvestmentsPage />} />\n <Route path=\"investments/:id\" element={<InvestmentDetailPage />} />\n\n {/* Offers */}\n <Route path=\"offers\" element={<OffersPage />} />\n\n {/* Viewings */}\n <Route path=\"viewings\" element={<ViewingsPage />} />\n\n {/* Analytics */}\n <Route path=\"analytics\" element={<AnalyticsPage />} />\n\n {/* Rental Management */}\n <Route path=\"rental\" element={<RentalManagementPage />} />\n\n {/* Asset Management */}\n <Route path=\"assets\" element={<AssetManagementPage />} />\n <Route path=\"assets/:id\" element={<AssetDetailPage />} />\n\n {/* AMC Management */}\n <Route path=\"amc\" element={<AMCManagementPage />} />\n\n {/* Marketplace */}\n <Route path=\"marketplace\" element={<MarketplacePage />} />\n <Route path=\"marketplace/:id\" element={<ServiceDetailPage />} />\n\n {/* Verification */}\n <Route path=\"verification\" element={<VerificationPage />} />\n <Route path=\"verification/:id\" element={<VerificationDetailPage />} />\n\n {/* Legal */}\n <Route path=\"legal\" element={<LegalPage />} />\n <Route path=\"legal/:id\" element={<LegalServiceDetailPage />} />\n\n {/* Home Loans */}\n <Route path=\"home-loans\" element={<HomeLoansPage />} />\n <Route path=\"home-loans/:id/apply\" element={<HomeLoanDetailPage />} />\n\n {/* Market Analytics */}\n <Route path=\"market-analytics\" element={<MarketAnalyticsPage />} />\n <Route path=\"area-insights\" element={<AreaInsightsPage />} />\n\n {/* Settings & Profile */}\n <Route path=\"settings\" element={<SettingsPage />} />\n <Route path=\"profile\" element={<ProfilePage />} />\n\n {/* Catch-all: redirect to dashboard */}\n <Route path=\"*\" element={<Navigate to=\"\" replace />} />\n </Routes>\n </Suspense>\n );\n}\n"],"mappings":"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"}
|
|
@@ -1,31 +1,36 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
1
|
+
import { useHousingVista as e } from "../context/HousingVistaContext.js";
|
|
2
|
+
import { cn as t } from "../utils/helpers.js";
|
|
3
|
+
import { ChevronRight as n, Home as r } from "lucide-react";
|
|
4
|
+
import { Link as i } from "react-router-dom";
|
|
5
|
+
import { jsx as a, jsxs as o } from "react/jsx-runtime";
|
|
5
6
|
//#region src/housingvista/components/Breadcrumbs.tsx
|
|
6
|
-
var
|
|
7
|
-
"
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
})
|
|
7
|
+
var s = ({ items: s, className: c }) => {
|
|
8
|
+
let { basePath: l } = e(), u = l && l !== "/" ? l : "/";
|
|
9
|
+
return /* @__PURE__ */ o("nav", {
|
|
10
|
+
"aria-label": "Breadcrumb",
|
|
11
|
+
className: t("flex items-center gap-1 text-sm", c),
|
|
12
|
+
children: [/* @__PURE__ */ a(i, {
|
|
13
|
+
to: u,
|
|
14
|
+
className: "flex items-center text-text-secondary hover:text-text-primary",
|
|
15
|
+
"aria-label": "Dashboard",
|
|
16
|
+
children: /* @__PURE__ */ a(r, { className: "h-3.5 w-3.5" })
|
|
17
|
+
}), s.map((e, r) => {
|
|
18
|
+
let c = r === s.length - 1;
|
|
19
|
+
return /* @__PURE__ */ o("span", {
|
|
20
|
+
className: "flex items-center gap-1",
|
|
21
|
+
children: [/* @__PURE__ */ a(n, { className: "h-3.5 w-3.5 text-text-secondary/50" }), c || !e.href ? /* @__PURE__ */ a("span", {
|
|
22
|
+
className: t(c ? "font-medium text-text-primary" : "text-text-secondary"),
|
|
23
|
+
children: e.label
|
|
24
|
+
}) : /* @__PURE__ */ a(i, {
|
|
25
|
+
to: e.href,
|
|
26
|
+
className: "text-text-secondary hover:text-text-primary",
|
|
27
|
+
children: e.label
|
|
28
|
+
})]
|
|
29
|
+
}, e.label);
|
|
30
|
+
})]
|
|
31
|
+
});
|
|
32
|
+
};
|
|
28
33
|
//#endregion
|
|
29
|
-
export {
|
|
34
|
+
export { s as Breadcrumbs };
|
|
30
35
|
|
|
31
36
|
//# sourceMappingURL=Breadcrumbs.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Breadcrumbs.js","names":[],"sources":["../../../src/housingvista/components/Breadcrumbs.tsx"],"sourcesContent":["import type { FC } from 'react';\nimport { ChevronRight, Home } from 'lucide-react';\nimport { Link } from 'react-router-dom';\nimport { cn } from '../utils/helpers';\n\nexport interface BreadcrumbItem {\n label: string;\n href?: string;\n}\n\ninterface BreadcrumbsProps {\n items: BreadcrumbItem[];\n className?: string;\n}\n\nexport const Breadcrumbs: FC<BreadcrumbsProps> = ({ items, className }) => {\n return (\n <nav aria-label=\"Breadcrumb\" className={cn('flex items-center gap-1 text-sm', className)}>\n <Link to
|
|
1
|
+
{"version":3,"file":"Breadcrumbs.js","names":[],"sources":["../../../src/housingvista/components/Breadcrumbs.tsx"],"sourcesContent":["import type { FC } from 'react';\nimport { ChevronRight, Home } from 'lucide-react';\nimport { Link } from 'react-router-dom';\nimport { cn } from '../utils/helpers';\nimport { useHousingVista } from '../context/HousingVistaContext';\n\nexport interface BreadcrumbItem {\n label: string;\n href?: string;\n}\n\ninterface BreadcrumbsProps {\n items: BreadcrumbItem[];\n className?: string;\n}\n\nexport const Breadcrumbs: FC<BreadcrumbsProps> = ({ items, className }) => {\n // The Home crumb must land on the HousingVista dashboard root regardless of\n // how deep the current route is nested, so link to the absolute mount path.\n const { basePath } = useHousingVista();\n const homeHref = basePath && basePath !== '/' ? basePath : '/';\n return (\n <nav aria-label=\"Breadcrumb\" className={cn('flex items-center gap-1 text-sm', className)}>\n <Link to={homeHref} className=\"flex items-center text-text-secondary hover:text-text-primary\" aria-label=\"Dashboard\">\n <Home className=\"h-3.5 w-3.5\" />\n </Link>\n {items.map((item, index) => {\n const isLast = index === items.length - 1;\n return (\n <span key={item.label} className=\"flex items-center gap-1\">\n <ChevronRight className=\"h-3.5 w-3.5 text-text-secondary/50\" />\n {isLast || !item.href ? (\n <span className={cn(isLast ? 'font-medium text-text-primary' : 'text-text-secondary')}>{item.label}</span>\n ) : (\n <Link to={item.href} className=\"text-text-secondary hover:text-text-primary\">\n {item.label}\n </Link>\n )}\n </span>\n );\n })}\n </nav>\n );\n};\n"],"mappings":";;;;;;AAgBA,IAAa,KAAqC,EAAE,UAAO,mBAAgB;CAGzE,IAAM,EAAE,gBAAa,GAAiB,EAChC,IAAW,KAAY,MAAa,MAAM,IAAW;AAC3D,QACE,kBAAC,OAAD;EAAK,cAAW;EAAa,WAAW,EAAG,mCAAmC,EAAU;YAAxF,CACE,kBAAC,GAAD;GAAM,IAAI;GAAU,WAAU;GAAgE,cAAW;aACvG,kBAAC,GAAD,EAAM,WAAU,eAAgB,CAAA;GAC3B,CAAA,EACN,EAAM,KAAK,GAAM,MAAU;GAC1B,IAAM,IAAS,MAAU,EAAM,SAAS;AACxC,UACE,kBAAC,QAAD;IAAuB,WAAU;cAAjC,CACE,kBAAC,GAAD,EAAc,WAAU,sCAAuC,CAAA,EAC9D,KAAU,CAAC,EAAK,OACf,kBAAC,QAAD;KAAM,WAAW,EAAG,IAAS,kCAAkC,sBAAsB;eAAG,EAAK;KAAa,CAAA,GAE1G,kBAAC,GAAD;KAAM,IAAI,EAAK;KAAM,WAAU;eAC5B,EAAK;KACD,CAAA,CAEJ;MATI,EAAK,MAST;IAET,CACE"}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
import { useHousingVista as e } from "../context/HousingVistaContext.js";
|
|
2
|
+
import { cn as t } from "../utils/helpers.js";
|
|
3
|
+
import { useContactConversation as n, useConversationMessages as r, useSendMessage as i } from "../hooks/platform.js";
|
|
4
|
+
import "../hooks/index.js";
|
|
5
|
+
import { notify as a } from "../lib/toast.js";
|
|
6
|
+
import { useEffect as o, useRef as s, useState as c } from "react";
|
|
7
|
+
import { Send as l } from "lucide-react";
|
|
8
|
+
import { jsx as u, jsxs as d } from "react/jsx-runtime";
|
|
9
|
+
import { Button as f, ResponsiveDialog as p, ResponsiveDialogContent as m, ResponsiveDialogDescription as h, ResponsiveDialogHeader as g, ResponsiveDialogTitle as _, ResponsiveDialogTrigger as v } from "@burdenoff/fe-libs/ui";
|
|
10
|
+
//#region src/housingvista/components/ContactOwnerDialog.tsx
|
|
11
|
+
var y = ({ entityId: y, entityType: b, title: x, pagePath: S, trigger: C, heading: w = "Contact", description: T }) => {
|
|
12
|
+
let { currentUser: E } = e(), { openConversation: D, loading: O } = n(), { sendMessage: k, loading: A } = i(), [j, M] = c(!1), [N, P] = c(), [F, I] = c(""), { data: L, loading: R } = r(N), z = s(null);
|
|
13
|
+
o(() => {
|
|
14
|
+
if (!j || N) return;
|
|
15
|
+
let e = !1;
|
|
16
|
+
return D({
|
|
17
|
+
entityId: y,
|
|
18
|
+
entityType: b,
|
|
19
|
+
title: x,
|
|
20
|
+
contextHref: S,
|
|
21
|
+
pagePath: S
|
|
22
|
+
}).then((t) => {
|
|
23
|
+
e || P(t.id);
|
|
24
|
+
}).catch((e) => a.error("Could not open the conversation", e.message)), () => {
|
|
25
|
+
e = !0;
|
|
26
|
+
};
|
|
27
|
+
}, [
|
|
28
|
+
j,
|
|
29
|
+
N,
|
|
30
|
+
D,
|
|
31
|
+
y,
|
|
32
|
+
b,
|
|
33
|
+
x,
|
|
34
|
+
S
|
|
35
|
+
]), o(() => {
|
|
36
|
+
z.current?.scrollTo({ top: z.current.scrollHeight });
|
|
37
|
+
}, [L]);
|
|
38
|
+
let B = async () => {
|
|
39
|
+
let e = F.trim();
|
|
40
|
+
if (!(!e || !N)) try {
|
|
41
|
+
await k(N, e), I("");
|
|
42
|
+
} catch (e) {
|
|
43
|
+
a.error("Message not sent", e.message);
|
|
44
|
+
}
|
|
45
|
+
}, V = E?.id ?? "";
|
|
46
|
+
return /* @__PURE__ */ d(p, {
|
|
47
|
+
open: j,
|
|
48
|
+
onOpenChange: M,
|
|
49
|
+
children: [/* @__PURE__ */ u(v, {
|
|
50
|
+
asChild: !0,
|
|
51
|
+
children: C
|
|
52
|
+
}), /* @__PURE__ */ d(m, {
|
|
53
|
+
className: "sm:max-w-lg",
|
|
54
|
+
children: [
|
|
55
|
+
/* @__PURE__ */ d(g, { children: [/* @__PURE__ */ u(_, { children: w }), /* @__PURE__ */ u(h, { children: T ?? `Start a conversation about ${x}. Messages are saved and delivered in your inbox.` })] }),
|
|
56
|
+
/* @__PURE__ */ u("div", {
|
|
57
|
+
ref: z,
|
|
58
|
+
className: "max-h-72 min-h-40 space-y-2 overflow-y-auto rounded-md border border-border-subtle bg-bg-sunken p-3",
|
|
59
|
+
children: O || R ? /* @__PURE__ */ u("p", {
|
|
60
|
+
className: "py-8 text-center text-sm text-text-secondary",
|
|
61
|
+
children: "Loading conversation…"
|
|
62
|
+
}) : L.length === 0 ? /* @__PURE__ */ u("p", {
|
|
63
|
+
className: "py-8 text-center text-sm text-text-secondary",
|
|
64
|
+
children: "No messages yet. Say hello to get the conversation started."
|
|
65
|
+
}) : L.map((e) => {
|
|
66
|
+
let n = e.authorId === V;
|
|
67
|
+
return /* @__PURE__ */ u("div", {
|
|
68
|
+
className: t("flex", n ? "justify-end" : "justify-start"),
|
|
69
|
+
children: /* @__PURE__ */ u("div", {
|
|
70
|
+
className: t("max-w-[80%] rounded-lg px-3 py-2 text-sm", n ? "bg-action-primary-bg text-action-primary-text" : "bg-bg-surface text-text-primary border border-border-subtle"),
|
|
71
|
+
children: e.text
|
|
72
|
+
})
|
|
73
|
+
}, e.id);
|
|
74
|
+
})
|
|
75
|
+
}),
|
|
76
|
+
/* @__PURE__ */ d("div", {
|
|
77
|
+
className: "mt-3 flex items-end gap-2",
|
|
78
|
+
children: [/* @__PURE__ */ u("textarea", {
|
|
79
|
+
value: F,
|
|
80
|
+
onChange: (e) => I(e.target.value),
|
|
81
|
+
onKeyDown: (e) => {
|
|
82
|
+
e.key === "Enter" && !e.shiftKey && (e.preventDefault(), B());
|
|
83
|
+
},
|
|
84
|
+
rows: 2,
|
|
85
|
+
placeholder: "Write a message…",
|
|
86
|
+
className: "min-h-10 flex-1 resize-none rounded-md border border-border-subtle bg-bg-surface px-3 py-2 text-sm text-text-primary placeholder:text-text-secondary focus:outline-none focus:ring-2 focus:ring-[var(--color-focus-ring)]"
|
|
87
|
+
}), /* @__PURE__ */ d(f, {
|
|
88
|
+
type: "button",
|
|
89
|
+
onClick: B,
|
|
90
|
+
disabled: !F.trim() || !N || A,
|
|
91
|
+
children: [/* @__PURE__ */ u(l, { className: "h-4 w-4" }), /* @__PURE__ */ u("span", {
|
|
92
|
+
className: "ml-1",
|
|
93
|
+
children: "Send"
|
|
94
|
+
})]
|
|
95
|
+
})]
|
|
96
|
+
})
|
|
97
|
+
]
|
|
98
|
+
})]
|
|
99
|
+
});
|
|
100
|
+
};
|
|
101
|
+
//#endregion
|
|
102
|
+
export { y as ContactOwnerDialog };
|
|
103
|
+
|
|
104
|
+
//# sourceMappingURL=ContactOwnerDialog.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ContactOwnerDialog.js","names":[],"sources":["../../../src/housingvista/components/ContactOwnerDialog.tsx"],"sourcesContent":["/**\n * Real messaging surface backed by wspace-conversations-svc. Any \"Contact /\n * Message / Apply / Contact Owner\" CTA renders this: it resolves (get-or-create)\n * the entity's conversation, shows the persisted thread, and posts messages via\n * `sendMessage`. No stub, no dead-end — everything is persisted server-side.\n * @module housingvista\n */\n\nimport { useEffect, useRef, useState, type FC, type ReactNode } from 'react';\nimport { Send } from 'lucide-react';\nimport {\n Button,\n ResponsiveDialog,\n ResponsiveDialogContent,\n ResponsiveDialogHeader,\n ResponsiveDialogTitle,\n ResponsiveDialogDescription,\n ResponsiveDialogTrigger,\n} from '@burdenoff/fe-libs/ui';\nimport { useContactConversation, useConversationMessages, useSendMessage } from '../hooks';\nimport { useHousingVista } from '../context/HousingVistaContext';\nimport { notify } from '../lib/toast';\nimport { cn } from '../utils/helpers';\n\ninterface ContactOwnerDialogProps {\n /** Stable id of the thing being discussed (property/service/listing id). */\n entityId: string;\n /** e.g. `housingvista-property`, `housingvista-marketplace-service`. */\n entityType: string;\n /** Title used when the conversation is first created. */\n title: string;\n /** Router path back into this surface (deep link). */\n pagePath: string;\n /** Clickable trigger element (button/link). */\n trigger: ReactNode;\n /** Dialog heading, defaults to \"Contact\". */\n heading?: string;\n description?: string;\n}\n\nexport const ContactOwnerDialog: FC<ContactOwnerDialogProps> = ({\n entityId,\n entityType,\n title,\n pagePath,\n trigger,\n heading = 'Contact',\n description,\n}) => {\n const { currentUser } = useHousingVista();\n const { openConversation, loading: opening } = useContactConversation();\n const { sendMessage, loading: sending } = useSendMessage();\n const [open, setOpen] = useState(false);\n const [conversationId, setConversationId] = useState<string | undefined>();\n const [draft, setDraft] = useState('');\n const { data: messages, loading: loadingMessages } = useConversationMessages(conversationId);\n const scrollRef = useRef<HTMLDivElement>(null);\n\n // Resolve the conversation the first time the dialog opens.\n useEffect(() => {\n if (!open || conversationId) return;\n let cancelled = false;\n openConversation({\n entityId,\n entityType,\n title,\n contextHref: pagePath,\n pagePath,\n })\n .then((res) => {\n if (!cancelled) setConversationId(res.id);\n })\n .catch((err: Error) => notify.error('Could not open the conversation', err.message));\n return () => {\n cancelled = true;\n };\n }, [open, conversationId, openConversation, entityId, entityType, title, pagePath]);\n\n useEffect(() => {\n scrollRef.current?.scrollTo({ top: scrollRef.current.scrollHeight });\n }, [messages]);\n\n const handleSend = async () => {\n const text = draft.trim();\n if (!text || !conversationId) return;\n try {\n await sendMessage(conversationId, text);\n setDraft('');\n } catch (err) {\n notify.error('Message not sent', (err as Error).message);\n }\n };\n\n const currentUserId = currentUser?.id ?? '';\n\n return (\n <ResponsiveDialog open={open} onOpenChange={setOpen}>\n <ResponsiveDialogTrigger asChild>{trigger}</ResponsiveDialogTrigger>\n <ResponsiveDialogContent className=\"sm:max-w-lg\">\n <ResponsiveDialogHeader>\n <ResponsiveDialogTitle>{heading}</ResponsiveDialogTitle>\n <ResponsiveDialogDescription>\n {description ?? `Start a conversation about ${title}. Messages are saved and delivered in your inbox.`}\n </ResponsiveDialogDescription>\n </ResponsiveDialogHeader>\n\n <div\n ref={scrollRef}\n className=\"max-h-72 min-h-40 space-y-2 overflow-y-auto rounded-md border border-border-subtle bg-bg-sunken p-3\"\n >\n {opening || loadingMessages ? (\n <p className=\"py-8 text-center text-sm text-text-secondary\">Loading conversation…</p>\n ) : messages.length === 0 ? (\n <p className=\"py-8 text-center text-sm text-text-secondary\">\n No messages yet. Say hello to get the conversation started.\n </p>\n ) : (\n messages.map((message) => {\n const mine = message.authorId === currentUserId;\n return (\n <div key={message.id} className={cn('flex', mine ? 'justify-end' : 'justify-start')}>\n <div\n className={cn(\n 'max-w-[80%] rounded-lg px-3 py-2 text-sm',\n mine\n ? 'bg-action-primary-bg text-action-primary-text'\n : 'bg-bg-surface text-text-primary border border-border-subtle'\n )}\n >\n {message.text}\n </div>\n </div>\n );\n })\n )}\n </div>\n\n <div className=\"mt-3 flex items-end gap-2\">\n <textarea\n value={draft}\n onChange={(event) => setDraft(event.target.value)}\n onKeyDown={(event) => {\n if (event.key === 'Enter' && !event.shiftKey) {\n event.preventDefault();\n void handleSend();\n }\n }}\n rows={2}\n placeholder=\"Write a message…\"\n className=\"min-h-10 flex-1 resize-none rounded-md border border-border-subtle bg-bg-surface px-3 py-2 text-sm text-text-primary placeholder:text-text-secondary focus:outline-none focus:ring-2 focus:ring-[var(--color-focus-ring)]\"\n />\n <Button type=\"button\" onClick={handleSend} disabled={!draft.trim() || !conversationId || sending}>\n <Send className=\"h-4 w-4\" />\n <span className=\"ml-1\">Send</span>\n </Button>\n </div>\n </ResponsiveDialogContent>\n </ResponsiveDialog>\n );\n};\n"],"mappings":";;;;;;;;;;AAwCA,IAAa,KAAmD,EAC9D,aACA,eACA,UACA,aACA,YACA,aAAU,WACV,qBACI;CACJ,IAAM,EAAE,mBAAgB,GAAiB,EACnC,EAAE,qBAAkB,SAAS,MAAY,GAAwB,EACjE,EAAE,gBAAa,SAAS,MAAY,GAAgB,EACpD,CAAC,GAAM,KAAW,EAAS,GAAM,EACjC,CAAC,GAAgB,KAAqB,GAA8B,EACpE,CAAC,GAAO,KAAY,EAAS,GAAG,EAChC,EAAE,MAAM,GAAU,SAAS,MAAoB,EAAwB,EAAe,EACtF,IAAY,EAAuB,KAAK;AAsB9C,CAnBA,QAAgB;AACd,MAAI,CAAC,KAAQ,EAAgB;EAC7B,IAAI,IAAY;AAYhB,SAXA,EAAiB;GACf;GACA;GACA;GACA,aAAa;GACb;GACD,CAAC,CACC,MAAM,MAAQ;AACb,GAAK,KAAW,EAAkB,EAAI,GAAG;IACzC,CACD,OAAO,MAAe,EAAO,MAAM,mCAAmC,EAAI,QAAQ,CAAC,QACzE;AACX,OAAY;;IAEb;EAAC;EAAM;EAAgB;EAAkB;EAAU;EAAY;EAAO;EAAS,CAAC,EAEnF,QAAgB;AACd,IAAU,SAAS,SAAS,EAAE,KAAK,EAAU,QAAQ,cAAc,CAAC;IACnE,CAAC,EAAS,CAAC;CAEd,IAAM,IAAa,YAAY;EAC7B,IAAM,IAAO,EAAM,MAAM;AACrB,SAAC,KAAQ,CAAC,GACd,KAAI;AAEF,GADA,MAAM,EAAY,GAAgB,EAAK,EACvC,EAAS,GAAG;WACL,GAAK;AACZ,KAAO,MAAM,oBAAqB,EAAc,QAAQ;;IAItD,IAAgB,GAAa,MAAM;AAEzC,QACE,kBAAC,GAAD;EAAwB;EAAM,cAAc;YAA5C,CACE,kBAAC,GAAD;GAAyB,SAAA;aAAS;GAAkC,CAAA,EACpE,kBAAC,GAAD;GAAyB,WAAU;aAAnC;IACE,kBAAC,GAAD,EAAA,UAAA,CACE,kBAAC,GAAD,EAAA,UAAwB,GAAgC,CAAA,EACxD,kBAAC,GAAD,EAAA,UACG,KAAe,8BAA8B,EAAM,oDACxB,CAAA,CACP,EAAA,CAAA;IAEzB,kBAAC,OAAD;KACE,KAAK;KACL,WAAU;eAET,KAAW,IACV,kBAAC,KAAD;MAAG,WAAU;gBAA+C;MAAyB,CAAA,GACnF,EAAS,WAAW,IACtB,kBAAC,KAAD;MAAG,WAAU;gBAA+C;MAExD,CAAA,GAEJ,EAAS,KAAK,MAAY;MACxB,IAAM,IAAO,EAAQ,aAAa;AAClC,aACE,kBAAC,OAAD;OAAsB,WAAW,EAAG,QAAQ,IAAO,gBAAgB,gBAAgB;iBACjF,kBAAC,OAAD;QACE,WAAW,EACT,4CACA,IACI,kDACA,8DACL;kBAEA,EAAQ;QACL,CAAA;OACF,EAXI,EAAQ,GAWZ;OAER;KAEA,CAAA;IAEN,kBAAC,OAAD;KAAK,WAAU;eAAf,CACE,kBAAC,YAAD;MACE,OAAO;MACP,WAAW,MAAU,EAAS,EAAM,OAAO,MAAM;MACjD,YAAY,MAAU;AACpB,OAAI,EAAM,QAAQ,WAAW,CAAC,EAAM,aAClC,EAAM,gBAAgB,EACjB,GAAY;;MAGrB,MAAM;MACN,aAAY;MACZ,WAAU;MACV,CAAA,EACF,kBAAC,GAAD;MAAQ,MAAK;MAAS,SAAS;MAAY,UAAU,CAAC,EAAM,MAAM,IAAI,CAAC,KAAkB;gBAAzF,CACE,kBAAC,GAAD,EAAM,WAAU,WAAY,CAAA,EAC5B,kBAAC,QAAD;OAAM,WAAU;iBAAO;OAAW,CAAA,CAC3B;QACL;;IACkB;KACT"}
|