backend integration started
This commit is contained in:
@@ -16,9 +16,9 @@ const CONTEXT: Record<
|
||||
> = {
|
||||
'/nearle/stores': {
|
||||
page: 'Stores',
|
||||
title: 'Good afternoon',
|
||||
title: 'Nearle Buddy',
|
||||
greeting: 'Every tenant on the platform, and which of them have branches sitting idle.',
|
||||
reading: 'Reading the tenant directory — branch counts, status and per-tenant performance.',
|
||||
reading: 'Would cover the tenant directory — branch counts, status and per-tenant performance.',
|
||||
prompts: [
|
||||
'Which tenants have no branches?',
|
||||
'Who onboarded most recently?',
|
||||
@@ -30,14 +30,14 @@ const CONTEXT: Record<
|
||||
page: 'Onboard tenant',
|
||||
title: 'Provisioning a tenant',
|
||||
greeting: 'Registering the enterprise also creates its primary Administrator account.',
|
||||
reading: 'Reading the onboarding form — required fields, category and head-office address.',
|
||||
reading: 'Would cover the onboarding form — required fields, category and head-office address.',
|
||||
prompts: ['What does provisioning create?', 'Which fields are required?', 'What happens next?'],
|
||||
},
|
||||
'/nearle/catalogue': {
|
||||
page: 'Global catalogue',
|
||||
title: 'Stocking a store',
|
||||
greeting: 'The catalogue carries a price range, not a price — the store sets the real one.',
|
||||
reading: 'Reading the global catalogue and what this tenant has already imported.',
|
||||
reading: 'Would cover the global catalogue and what this tenant has already imported.',
|
||||
prompts: [
|
||||
'Which products are already imported?',
|
||||
'Catalogue or spreadsheet?',
|
||||
@@ -52,7 +52,7 @@ const CONTEXT: Record<
|
||||
page: 'Console',
|
||||
title: 'Across your branches',
|
||||
greeting: 'App sales, counter sales and imported bills are counted separately — they live in different ledgers.',
|
||||
reading: 'Reading every branch — revenue by channel, stock health, till status and what is waiting on you.',
|
||||
reading: 'Would cover every branch — revenue by channel, stock health, till status and what is waiting on you.',
|
||||
prompts: [
|
||||
'Which branch is underperforming?',
|
||||
'Any tills not syncing?',
|
||||
@@ -64,7 +64,7 @@ const CONTEXT: Record<
|
||||
page: 'Sales',
|
||||
title: 'Orders and deliveries',
|
||||
greeting: 'An app order and a counter bill are both sales, but only one of them has a delivery.',
|
||||
reading: 'Reading orders, counter bills and delivery progress across your branches.',
|
||||
reading: 'Would cover orders, counter bills and delivery progress across your branches.',
|
||||
prompts: [
|
||||
'Why is the cancel rate high?',
|
||||
'Which orders are stuck?',
|
||||
@@ -76,7 +76,7 @@ const CONTEXT: Record<
|
||||
page: 'Inventory',
|
||||
title: 'Catalogue and stock',
|
||||
greeting: 'A product in the store catalogue does not mean stock on the shelf — that takes an approved request.',
|
||||
reading: 'Reading your catalogue, per-branch stock levels and the stock requests waiting on you.',
|
||||
reading: 'Would cover your catalogue, per-branch stock levels and the stock requests waiting on you.',
|
||||
prompts: [
|
||||
'What is waiting for approval?',
|
||||
'Which products are unpublished?',
|
||||
@@ -88,7 +88,7 @@ const CONTEXT: Record<
|
||||
page: 'Users & access',
|
||||
title: 'Who can sign in',
|
||||
greeting: 'A till account and a console login are two different things — a cashier has no console access at all.',
|
||||
reading: 'Reading your back-office directory and the till accounts at each branch.',
|
||||
reading: 'Would cover your back-office directory and the till accounts at each branch.',
|
||||
prompts: [
|
||||
'What is the difference between the two?',
|
||||
'How do I add a cashier?',
|
||||
@@ -100,10 +100,10 @@ const CONTEXT: Record<
|
||||
page: 'Reports',
|
||||
title: 'Revenue, sales and stock',
|
||||
greeting: 'Fast and slow movers are the two lists that change what you order next.',
|
||||
reading: 'Reading revenue by channel and branch, product performance and stock movement.',
|
||||
reading: 'Would cover revenue by channel and branch, product performance and stock movement.',
|
||||
prompts: [
|
||||
'Which products are slow moving?',
|
||||
'Compare my three branches',
|
||||
'Compare my branches',
|
||||
'Online versus counter revenue',
|
||||
'What is my inventory worth?',
|
||||
],
|
||||
@@ -114,7 +114,7 @@ const FALLBACK = {
|
||||
page: 'Console',
|
||||
title: 'Good afternoon',
|
||||
greeting: 'Ask about anything on this page.',
|
||||
reading: 'Reading this page.',
|
||||
reading: 'Would cover this page.',
|
||||
prompts: ['What needs attention?', 'Summarise this page'],
|
||||
};
|
||||
|
||||
@@ -295,6 +295,13 @@ export function AssistantPanel({
|
||||
))}
|
||||
</div>
|
||||
|
||||
{/* Disabled, not merely inert.
|
||||
|
||||
This composer used to accept text and enable a brand-purple send
|
||||
button the moment you typed — then swallow the submit. There is no
|
||||
assistant endpoint anywhere in `src/api`. A disabled field says the
|
||||
same thing honestly and costs nobody a message they thought they
|
||||
sent. */}
|
||||
<form
|
||||
onSubmit={(event) => event.preventDefault()}
|
||||
style={{
|
||||
@@ -323,8 +330,9 @@ export function AssistantPanel({
|
||||
}}
|
||||
onFocus={() => setIsFocused(true)}
|
||||
onBlur={() => setIsFocused(false)}
|
||||
placeholder={`Ask Buddy about ${context.page.toLowerCase()}…`}
|
||||
aria-label="Ask Nearle Buddy"
|
||||
disabled
|
||||
placeholder="Not connected yet"
|
||||
aria-label="Ask Nearle Buddy — not connected yet"
|
||||
style={{
|
||||
display: 'block',
|
||||
width: '100%',
|
||||
@@ -343,18 +351,18 @@ export function AssistantPanel({
|
||||
<button
|
||||
type="submit"
|
||||
aria-label="Send message"
|
||||
disabled={draft.trim() === ''}
|
||||
disabled
|
||||
style={{
|
||||
width: 28,
|
||||
height: 28,
|
||||
borderRadius: 999,
|
||||
border: 0,
|
||||
flex: 'none',
|
||||
background: draft.trim() ? 'var(--color-brand)' : 'var(--color-surface-sunken)',
|
||||
color: draft.trim() ? '#fff' : 'var(--color-ink-4)',
|
||||
background: 'var(--color-surface-sunken)',
|
||||
color: 'var(--color-ink-4)',
|
||||
display: 'grid',
|
||||
placeItems: 'center',
|
||||
cursor: draft.trim() ? 'pointer' : 'default',
|
||||
cursor: 'default',
|
||||
transition: 'background .2s',
|
||||
}}
|
||||
>
|
||||
@@ -371,7 +379,7 @@ export function AssistantPanel({
|
||||
textAlign: 'center',
|
||||
}}
|
||||
>
|
||||
Buddy reads this page's data. Check anything you act on.
|
||||
Not connected yet — there is no assistant service behind this panel.
|
||||
</p>
|
||||
</div>
|
||||
</aside>
|
||||
|
||||
Reference in New Issue
Block a user