feat(tenancy): add member detail modal + fix invite name saving
Some checks failed
CI / ruff (push) Successful in 15s
CI / validate (push) Has been cancelled
CI / dependency-scanning (push) Has been cancelled
CI / docs (push) Has been cancelled
CI / deploy (push) Has been cancelled
CI / pytest (push) Has been cancelled

Merchant team page:
- Consistent member display (full_name + email on every row)
- New view button (eye icon) on all members including owner
- View modal shows account info (username, role, email verified,
  last login, account created) and store memberships with roles
- API enriched with user metadata (username, role, is_email_verified,
  last_login, created_at)

Invite fix (both merchant and store routes):
- first_name and last_name from invite form were never passed to the
  service that creates the User account. Now passed through correctly.

i18n: 6 new keys across 4 locales (view_member, account_information,
username, email_verified, last_login, account_created).

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-03-29 13:23:20 +02:00
parent d81e9a3fa4
commit 211c46ebbc
10 changed files with 151 additions and 26 deletions

View File

@@ -220,6 +220,8 @@ async def merchant_team_invite(
inviter=inviter,
email=data.email,
role_name=data.role_name,
first_name=data.first_name,
last_name=data.last_name,
)
results.append(MerchantTeamInviteResult(
store_id=store.id,

View File

@@ -140,6 +140,8 @@ def invite_team_member(
inviter=current_user,
email=invitation.email,
role_id=invitation.role_id,
first_name=invitation.first_name,
last_name=invitation.last_name,
)
elif invitation.role_name:
# Use role name with optional custom permissions
@@ -149,6 +151,8 @@ def invite_team_member(
inviter=current_user,
email=invitation.email,
role_name=invitation.role_name,
first_name=invitation.first_name,
last_name=invitation.last_name,
custom_permissions=invitation.custom_permissions,
)
else: