Skip to content

Settings — Profile, language, store

import { Aside } from ‘@astrojs/starlight/components’;

ItemOpen fromPurposePermission
Profile/point-of-sale/settings/profileName, password, sign outAny cashier
LanguagePosSettingsLanguageModalUI locale (en, vi)Any cashier
Store/point-of-sale/settings/storeView the active store infoRequires pos write

Profile — info tab Image: Profile tab — email (read-only), name, avatar, sign-out button. Spec owner: cashier-screenshots.spec.ts → "settings — profile (with profile tab active)".

Profile — change password tab Image: Password tab — RHF + Zod form, real-time validation. Spec owner: cashier-screenshots.spec.ts → "settings — profile password tab".

Language — open locale modal Image: locale picker (English / Tiếng Việt) — opens from the language card on the hub. Spec owner: cashier-screenshots.spec.ts → "settings — language modal (open)".

Store — active store info Image: store page — store ID, name, phone (read-only). Spec owner: cashier-screenshots.spec.ts → "settings — store info".

From the Cashier shell → Settings → Profile (/point-of-sale/settings/profile). The page has 2 tabs:

  • Profile — display name, email (not editable), avatar.
  • Password — change password with RHF + Zod (<ChangePasswordSettings>).

URL sync: the active tab is stored via ?tab=profile or ?tab=password (useSearchParams).

Scroll to the bottom of the page → click Sign out → confirm in <LogoutModal>.

Source: apps/vendor-web/src/app/point-of-sale/pages/settings/settings-profile-page.tsx.

  • Email cannot be changed from POS — only the owner can change it in Dashboard.
  • New password must satisfy the schema (<ChangePasswordSettings>).
  • After sign-out, the cashier is sent back to /cashier-login.

From the Cashier shell → Settings → Language → opens the Modal PosSettingsLanguageModal.

  • 🇬🇧 English — default for every new cashier.
  • 🇻🇳 Tiếng Việt — switches the entire UI to Vietnamese.

Source: apps/docs ships /vi/ mirrors — when you switch to Vietnamese, the docs site also auto-switches to /vi/....

From the Cashier shell → Settings → Store (/point-of-sale/settings/store) — only shown when an active store is selected.

This page is read-only (store editing happens in Dashboard):

FieldSource
Store IDusePosStoreId()
Store nameusePosStoreBrand().name (falls back to “Unnamed store”)
Phonestore.phone (if present)

Source: settings-store-page.tsx.

Not from this page — use the store selector on the Cashier shell’s top bar. When switching:

  1. Catalog, prices, customers, tax all change (one dataset per store).
  2. The cart is cleared — finish or save as draft before switching.
  3. Employees pinned to one store (profile.store_id) won’t see the dropdown.

See Sale — with customer and FAQ — sale & checkout → Session expired.

SymptomFix
Email field is empty / disabledEmail cannot be changed from POS; owner changes it in Dashboard
“Password” tab shows validation errorsNew password must be long enough and different from the current one
“Store” item missingNo active store selected on the top bar, or missing pos write
Language change doesn’t affect the shellReload POS (Ctrl/Cmd + R) after changing the locale