Skip to content

Feature/admin - #29

Merged
laithanhhung merged 10 commits into
devfrom
feature/admin
Aug 4, 2026
Merged

Feature/admin#29
laithanhhung merged 10 commits into
devfrom
feature/admin

Conversation

@laithanhhung

Copy link
Copy Markdown
Member

No description provided.

laithanhhung and others added 10 commits July 29, 2026 12:42
…I spec

Regenerated by hand (Docker unavailable) against the current live
swagger.json: drops page/pageSize from endpoints the backend no longer
paginates (Categories, Markets, DeliveryZones, Units), adds the new
required marketId on hub create/update, packingCodeId on products,
deliveryWindowDays on operational settings, and wires the new
RestaurantFavorites + tax-profile client methods. Removes the now-dead
HandoverRequest model.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Catalog now fetches all products across every market once and joins
price/quantity from each market's listing, replacing the old
price-less /products view; adds a heart toggle wired to the real
favorites API, and a tax-profile form on the restaurant onboarding
flow. Updates the admin console (hubs, markets, delivery zones,
products, units, operational settings) for the pagination/field
changes from the API spec sync. Deletes the dead Fuse catalog mock-api
scaffold that nothing referenced.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…ry addresses; restructure profile into tabs

Wires the remaining restaurant-role backend APIs that had no UI:
- Orders: checkout now creates and confirms a real order instead of a
  local-only demo cart; new order history/detail pages with cancel and
  reorder; the header's order-tracking widget shows the real latest order.
- Credit: balance, statements (with PDF download), and transaction ledger.
- Invoices: list and detail, rendered generically since the backend
  declares no response schema.
- Notifications: header panel now backed by the real list/mark-read API
  (no delete or mark-all — the backend doesn't support them).
- Delivery addresses: add/edit/delete on the profile page.

Restructures `/profile` into a single tabbed area (detail info+credit /
order history / invoices) reachable from the header's account menu, and
opens it to every role — non-restaurant users get a basic account-info
editor instead of the restaurant-specific forms. Removes the now-redundant
sidebar nav entries.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Add cross-dock, outbound, procurement plan, and orders-by-restaurant
read-only views to hub oversight, plus sorting progress on route
detail; add a demand heatmap chart to the analytics dashboard.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Retire mock-api and unused Fuse layouts so the shell stays
dense+enterprise. Add vận hành/quản trị console switch and
local shortcuts.

Co-authored-by: Cursor <cursoragent@cursor.com>
…data

Header icons get short functional micro-motion per MOTION.md: hover/focus
scale on every trigger, a one-shot bell nudge when unread notifications
increase, and a pop on the favorites badge when an item is added. Shared
styles live in header-icon-motion.scss and are disabled under
prefers-reduced-motion. The nudge is opt-in (`microMotion`) so only the
storefront header animates, not the admin shell.

Branch picker is replaced by a market picker backed by
MarketSelectionService; it is mirrored into the mobile header because the
desktop top strip is not rendered there and the catalog needs a market to
load anything.

Catalog, cart, favorites and draft order now read the real API — the
demo-data modules and the mocked AI chat reply are gone. Adds theme color
tokens plus a contrast check wired into precheck.
Share enterprise layout on /catalog with logo-market grid,
sticky logo-primary pin, and pin/route logo motion. Extract
header strip, nav row, footer, and quick-buy; fix nav
embedded() always-true signal bug.

Co-authored-by: Cursor <cursoragent@cursor.com>
…ant modules

- Redesign storefront footer (store logos, logo-full) and catalog page
  (category tree, infinite scroll grid, standalone product card)
- Add restaurant onboarding wizard, dashboard, scheduled orders, setup modules
- Regenerate API contract (adds Shipping/PackingCodes, drops DeliveryZones)
- Rework admin logistics (routes/vehicles) off the removed delivery-zones API
- Drop legacy splash-screen animation modules; simplify constants
- Update i18n (vi/en) for footer, catalog, and product card strings

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Pre-commit hook's lint-staged auto-fix ran but lost the re-stage race
against a concurrent git process; committing the formatted result.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
No restaurant could place an order. `POST /orders/{id}/confirm` requires a
`deliveryAddressId` body, but the snapshot in `src/contract/openapi.json`
predates it and declares no request body — so the generated client sent none
and the backend answered 415 / `'Delivery Address Id' must not be empty`.
Every checkout created a draft it could never confirm, which is why the
restaurant order list filled with drafts and auto-batching kept reporting
`no_eligible_orders`. Confirm and confirm-preview now go through `rawApi`
with the address.

Order API usage audited against the live backend:

- `confirm-preview` matched on none of the real field names. `wouldSucceed`,
  `issues` and `remainingCreditAfter` were absent from the alias lists, so
  the verdict always fell through to the tolerant `true` default: the gate
  never fired and refusal reasons never reached the buyer. Parser extracted
  to `orders/confirm-preview.ts`.
- The preview also prices delivery (`subtotalAmount` / `deliveryFee` /
  `deliveryDistanceKm` / `vatAmount`), but only when given the address —
  without it the route 404s. Checkout now shows the server's own breakdown
  instead of an invented 8% VAT and a coupon box with no API behind it, so
  the payable matches what is charged to credit (BR-CRE-1).
- `ordering-window` returns `deliveryWindowDays`; the picker hardcoded 7.
- A blocked attempt reused its draft instead of creating a new one per retry.

Admin ▸ order groups: the auto-batch result matched none of the response
either (`batchesCreated` / `ordersBatched` / `itemsAggregated` / `skipped` /
`reason` / `preview`), so the banner showed three zeroes, no reason, and
labelled a dry run "applied". A skipped run now explains itself.

Restaurant approval: `/restaurants/me/approval-status` answers the lifecycle
vocabulary `pending | active | suspended`, not `approved`, so every approved
restaurant fell through to the pending fallback and stayed gated. Mapped once
in `toApprovalStatus`. The approve action itself was gated on `isActive`,
which the API reports as `true` for every restaurant including pending ones,
so "Duyệt" never rendered — it now keys off `restaurantStatus` and is
available from the list as well as the detail page.

Credit limits were unreachable for the same class of reason: the snapshot
always reads back `creditLimit: 0`, which the card treated as "already
configured". `getRestaurantCredit` also skipped `unwrapData`, so every field
read as undefined.

Delivery windows are now one list shared by `/profile/business` (where the
restaurant declares its receiving hours) and `/checkout` (which offers only
those hours, preselecting the window the last order used).

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@coderabbitai

coderabbitai Bot commented Aug 4, 2026

Copy link
Copy Markdown

Important

Review skipped

Too many files!

This PR contains 379 files, which is 279 over the limit of 100.

To get a review, reduce the PR to 100 files or fewer by splitting it into smaller PRs or changing its base branch.

Upgrade to a paid plan to raise the limit.

Usage-priced reviews support at most 300 files.

⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 38b79e29-7524-4d37-89a8-595ea610456a

📥 Commits

Reviewing files that changed from the base of the PR and between 2bc2f07 and 4e4db6c.

⛔ Files ignored due to path filters (176)
  • package-lock.json is excluded by !**/package-lock.json
  • public/app-store-icon.svg is excluded by !**/*.svg
  • public/assistant.svg is excluded by !**/*.svg
  • public/favicon-16x16.png is excluded by !**/*.png
  • public/favicon-32x32.png is excluded by !**/*.png
  • public/fonts/inter/Inter-italic.var.woff2 is excluded by !**/*.woff2
  • public/fonts/inter/Inter-roman.var.woff2 is excluded by !**/*.woff2
  • public/google-play-icon.svg is excluded by !**/*.svg
  • public/icons/material-outline.svg is excluded by !**/*.svg
  • public/icons/material-solid.svg is excluded by !**/*.svg
  • public/icons/material-twotone.svg is excluded by !**/*.svg
  • public/images/logo/logo-full.svg is excluded by !**/*.svg
  • public/images/logo/logo-market.svg is excluded by !**/*.svg
  • public/images/logo/logo-primary-dark.svg is excluded by !**/*.svg
  • public/images/logo/logo-primary.svg is excluded by !**/*.svg
  • public/images/logo/logo-secondary-dark.svg is excluded by !**/*.svg
  • public/images/logo/logo-secondary.svg is excluded by !**/*.svg
  • public/images/logo/logo.svg is excluded by !**/*.svg
  • public/images/stores/app-store.svg is excluded by !**/*.svg
  • public/images/stores/google-play.svg is excluded by !**/*.svg
  • public/messenger.svg is excluded by !**/*.svg
  • public/shipper.png is excluded by !**/*.png
  • src/contract/generated/.openapi-generator/FILES is excluded by !**/generated/**
  • src/contract/generated/apis/AdminApi.ts is excluded by !**/generated/**
  • src/contract/generated/apis/AnalyticsApi.ts is excluded by !**/generated/**
  • src/contract/generated/apis/AssistantApi.ts is excluded by !**/generated/**
  • src/contract/generated/apis/AuthApi.ts is excluded by !**/generated/**
  • src/contract/generated/apis/CategoriesApi.ts is excluded by !**/generated/**
  • src/contract/generated/apis/DeliveryZonesApi.ts is excluded by !**/generated/**
  • src/contract/generated/apis/DriverApi.ts is excluded by !**/generated/**
  • src/contract/generated/apis/HubHandoverApi.ts is excluded by !**/generated/**
  • src/contract/generated/apis/HubInboundApi.ts is excluded by !**/generated/**
  • src/contract/generated/apis/HubStaffAssignmentsApi.ts is excluded by !**/generated/**
  • src/contract/generated/apis/HubsApi.ts is excluded by !**/generated/**
  • src/contract/generated/apis/InvoicesApi.ts is excluded by !**/generated/**
  • src/contract/generated/apis/MarketsApi.ts is excluded by !**/generated/**
  • src/contract/generated/apis/NotificationApi.ts is excluded by !**/generated/**
  • src/contract/generated/apis/NotificationDeviceApi.ts is excluded by !**/generated/**
  • src/contract/generated/apis/OrdersApi.ts is excluded by !**/generated/**
  • src/contract/generated/apis/PackingCodesApi.ts is excluded by !**/generated/**
  • src/contract/generated/apis/PricingApi.ts is excluded by !**/generated/**
  • src/contract/generated/apis/ProcurementApi.ts is excluded by !**/generated/**
  • src/contract/generated/apis/ProductsApi.ts is excluded by !**/generated/**
  • src/contract/generated/apis/ProfileApi.ts is excluded by !**/generated/**
  • src/contract/generated/apis/RestaurantCreditApi.ts is excluded by !**/generated/**
  • src/contract/generated/apis/RestaurantFavoritesApi.ts is excluded by !**/generated/**
  • src/contract/generated/apis/RestaurantProfileApi.ts is excluded by !**/generated/**
  • src/contract/generated/apis/RoutesApi.ts is excluded by !**/generated/**
  • src/contract/generated/apis/ShippingApi.ts is excluded by !**/generated/**
  • src/contract/generated/apis/UnitsApi.ts is excluded by !**/generated/**
  • src/contract/generated/apis/VehiclesApi.ts is excluded by !**/generated/**
  • src/contract/generated/apis/index.ts is excluded by !**/generated/**
  • src/contract/generated/docs/AddFavoriteRequest.md is excluded by !**/generated/**
  • src/contract/generated/docs/AdminApi.md is excluded by !**/generated/**
  • src/contract/generated/docs/AssistantApi.md is excluded by !**/generated/**
  • src/contract/generated/docs/CalculateRouteRequest.md is excluded by !**/generated/**
  • src/contract/generated/docs/CategoriesApi.md is excluded by !**/generated/**
  • src/contract/generated/docs/CreateCategoryRequest.md is excluded by !**/generated/**
  • src/contract/generated/docs/CreateHubRequest.md is excluded by !**/generated/**
  • src/contract/generated/docs/CreateMarketRequest.md is excluded by !**/generated/**
  • src/contract/generated/docs/CreatePackingCodeRequest.md is excluded by !**/generated/**
  • src/contract/generated/docs/CreateProductRequest.md is excluded by !**/generated/**
  • src/contract/generated/docs/DriverApi.md is excluded by !**/generated/**
  • src/contract/generated/docs/HubHandoverApi.md is excluded by !**/generated/**
  • src/contract/generated/docs/HubInboundApi.md is excluded by !**/generated/**
  • src/contract/generated/docs/HubInboundItemCommand.md is excluded by !**/generated/**
  • src/contract/generated/docs/InvoicesApi.md is excluded by !**/generated/**
  • src/contract/generated/docs/MarkLineSortedRequest.md is excluded by !**/generated/**
  • src/contract/generated/docs/MarketsApi.md is excluded by !**/generated/**
  • src/contract/generated/docs/OrdersApi.md is excluded by !**/generated/**
  • src/contract/generated/docs/PackingCodesApi.md is excluded by !**/generated/**
  • src/contract/generated/docs/PlanRoutesRequest.md is excluded by !**/generated/**
  • src/contract/generated/docs/ProcurementApi.md is excluded by !**/generated/**
  • src/contract/generated/docs/ReorderRouteRequest.md is excluded by !**/generated/**
  • src/contract/generated/docs/ResetOrderGroupsRequest.md is excluded by !**/generated/**
  • src/contract/generated/docs/RestaurantFavoritesApi.md is excluded by !**/generated/**
  • src/contract/generated/docs/RestaurantProfileApi.md is excluded by !**/generated/**
  • src/contract/generated/docs/RoutesApi.md is excluded by !**/generated/**
  • src/contract/generated/docs/ShippingApi.md is excluded by !**/generated/**
  • src/contract/generated/docs/UpdateCategoryRequest.md is excluded by !**/generated/**
  • src/contract/generated/docs/UpdateHubRequest.md is excluded by !**/generated/**
  • src/contract/generated/docs/UpdateMarketRequest.md is excluded by !**/generated/**
  • src/contract/generated/docs/UpdateOperationalSettingsRequest.md is excluded by !**/generated/**
  • src/contract/generated/docs/UpdatePackingCodeRequest.md is excluded by !**/generated/**
  • src/contract/generated/docs/UpdateProductRequest.md is excluded by !**/generated/**
  • src/contract/generated/docs/UpdateTaxProfileRequest.md is excluded by !**/generated/**
  • src/contract/generated/index.ts is excluded by !**/generated/**
  • src/contract/generated/models/ActivateRequest.ts is excluded by !**/generated/**
  • src/contract/generated/models/AddFavoriteRequest.ts is excluded by !**/generated/**
  • src/contract/generated/models/AddOrderItemRequest.ts is excluded by !**/generated/**
  • src/contract/generated/models/AdvanceOrderStatusRequest.ts is excluded by !**/generated/**
  • src/contract/generated/models/AssignAgentRequest.ts is excluded by !**/generated/**
  • src/contract/generated/models/AssignRoleRequest.ts is excluded by !**/generated/**
  • src/contract/generated/models/AssignVehicleRequest.ts is excluded by !**/generated/**
  • src/contract/generated/models/AssistantChatRequest.ts is excluded by !**/generated/**
  • src/contract/generated/models/AttachProofOfDeliveryRequest.ts is excluded by !**/generated/**
  • src/contract/generated/models/CalculateRouteRequest.ts is excluded by !**/generated/**
  • src/contract/generated/models/CancelOrderGroupRequest.ts is excluded by !**/generated/**
  • src/contract/generated/models/CancelOrderRequest.ts is excluded by !**/generated/**
  • src/contract/generated/models/ChangePasswordRequest.ts is excluded by !**/generated/**
  • src/contract/generated/models/ConfirmPickupRequest.ts is excluded by !**/generated/**
  • src/contract/generated/models/ConfirmPurchaseRequest.ts is excluded by !**/generated/**
  • src/contract/generated/models/CreateCategoryRequest.ts is excluded by !**/generated/**
  • src/contract/generated/models/CreateCrossDockRequest.ts is excluded by !**/generated/**
  • src/contract/generated/models/CreateDeliveryZoneRequest.ts is excluded by !**/generated/**
  • src/contract/generated/models/CreateDraftOrderRequest.ts is excluded by !**/generated/**
  • src/contract/generated/models/CreateHandoverRequest.ts is excluded by !**/generated/**
  • src/contract/generated/models/CreateHubRequest.ts is excluded by !**/generated/**
  • src/contract/generated/models/CreateMarketProductRequest.ts is excluded by !**/generated/**
  • src/contract/generated/models/CreateMarketRequest.ts is excluded by !**/generated/**
  • src/contract/generated/models/CreatePackingCodeRequest.ts is excluded by !**/generated/**
  • src/contract/generated/models/CreateProductRequest.ts is excluded by !**/generated/**
  • src/contract/generated/models/CreateScheduledOrderRequest.ts is excluded by !**/generated/**
  • src/contract/generated/models/CreateUnitRequest.ts is excluded by !**/generated/**
  • src/contract/generated/models/CreateUserCommand.ts is excluded by !**/generated/**
  • src/contract/generated/models/DeliveryAddressRequest.ts is excluded by !**/generated/**
  • src/contract/generated/models/DraftOrderItemRequest.ts is excluded by !**/generated/**
  • src/contract/generated/models/ForgotPasswordRequest.ts is excluded by !**/generated/**
  • src/contract/generated/models/GenerateStatementRequest.ts is excluded by !**/generated/**
  • src/contract/generated/models/HandoverRequest.ts is excluded by !**/generated/**
  • src/contract/generated/models/HubInboundItemCommand.ts is excluded by !**/generated/**
  • src/contract/generated/models/HubOutboundItemCommand.ts is excluded by !**/generated/**
  • src/contract/generated/models/LoginRequest.ts is excluded by !**/generated/**
  • src/contract/generated/models/LogoutRequest.ts is excluded by !**/generated/**
  • src/contract/generated/models/MarkLineSortedRequest.ts is excluded by !**/generated/**
  • src/contract/generated/models/OptimizeRouteRequest.ts is excluded by !**/generated/**
  • src/contract/generated/models/PlanRoutesRequest.ts is excluded by !**/generated/**
  • src/contract/generated/models/ProblemDetails.ts is excluded by !**/generated/**
  • src/contract/generated/models/PurchaseLineDto.ts is excluded by !**/generated/**
  • src/contract/generated/models/RecordActualQuantityRequest.ts is excluded by !**/generated/**
  • src/contract/generated/models/RecordDiscrepancyRequest.ts is excluded by !**/generated/**
  • src/contract/generated/models/RecordInboundItemRequest.ts is excluded by !**/generated/**
  • src/contract/generated/models/RecordInboundRequest.ts is excluded by !**/generated/**
  • src/contract/generated/models/RecordOutboundItemRequest.ts is excluded by !**/generated/**
  • src/contract/generated/models/RecordOutboundRequest.ts is excluded by !**/generated/**
  • src/contract/generated/models/RefreshRequest.ts is excluded by !**/generated/**
  • src/contract/generated/models/RegisterNotificationDeviceRequest.ts is excluded by !**/generated/**
  • src/contract/generated/models/RegisterRestaurantRequest.ts is excluded by !**/generated/**
  • src/contract/generated/models/RegisterVehicleRequest.ts is excluded by !**/generated/**
  • src/contract/generated/models/ReorderFromHistoryRequest.ts is excluded by !**/generated/**
  • src/contract/generated/models/ReorderRouteRequest.ts is excluded by !**/generated/**
  • src/contract/generated/models/ReplaceHubStaffAssignmentsRequest.ts is excluded by !**/generated/**
  • src/contract/generated/models/ReplaceMarketAssignmentsRequest.ts is excluded by !**/generated/**
  • src/contract/generated/models/ReportDeliveryIssueRequest.ts is excluded by !**/generated/**
  • src/contract/generated/models/ReportOrderIssueRequest.ts is excluded by !**/generated/**
  • src/contract/generated/models/ReportProcurementExceptionRequest.ts is excluded by !**/generated/**
  • src/contract/generated/models/RequestVerificationRequest.ts is excluded by !**/generated/**
  • src/contract/generated/models/ResetOrderGroupsRequest.ts is excluded by !**/generated/**
  • src/contract/generated/models/ResetPasswordRequest.ts is excluded by !**/generated/**
  • src/contract/generated/models/ReviewRouteRequest.ts is excluded by !**/generated/**
  • src/contract/generated/models/RunAutoBatchRequest.ts is excluded by !**/generated/**
  • src/contract/generated/models/ScanInboundRequest.ts is excluded by !**/generated/**
  • src/contract/generated/models/SetCreditLimitRequest.ts is excluded by !**/generated/**
  • src/contract/generated/models/SettleCreditRequest.ts is excluded by !**/generated/**
  • src/contract/generated/models/UnregisterNotificationDeviceRequest.ts is excluded by !**/generated/**
  • src/contract/generated/models/UpdateAvailableQuantityRequest.ts is excluded by !**/generated/**
  • src/contract/generated/models/UpdateCategoryRequest.ts is excluded by !**/generated/**
  • src/contract/generated/models/UpdateDeliveryStatusRequest.ts is excluded by !**/generated/**
  • src/contract/generated/models/UpdateDeliveryZoneRequest.ts is excluded by !**/generated/**
  • src/contract/generated/models/UpdateHubRequest.ts is excluded by !**/generated/**
  • src/contract/generated/models/UpdateMarketRequest.ts is excluded by !**/generated/**
  • src/contract/generated/models/UpdateMyProfileRequest.ts is excluded by !**/generated/**
  • src/contract/generated/models/UpdateOperationalSettingsRequest.ts is excluded by !**/generated/**
  • src/contract/generated/models/UpdateOrderItemRequest.ts is excluded by !**/generated/**
  • src/contract/generated/models/UpdatePackingCodeRequest.ts is excluded by !**/generated/**
  • src/contract/generated/models/UpdatePricingSettingsRequest.ts is excluded by !**/generated/**
  • src/contract/generated/models/UpdateProductPriceRequest.ts is excluded by !**/generated/**
  • src/contract/generated/models/UpdateProductRequest.ts is excluded by !**/generated/**
  • src/contract/generated/models/UpdateRestaurantProfileRequest.ts is excluded by !**/generated/**
  • src/contract/generated/models/UpdateScheduledOrderRequest.ts is excluded by !**/generated/**
  • src/contract/generated/models/UpdateTaxProfileRequest.ts is excluded by !**/generated/**
  • src/contract/generated/models/UpdateUnitRequest.ts is excluded by !**/generated/**
  • src/contract/generated/models/UpdateVehicleRequest.ts is excluded by !**/generated/**
  • src/contract/generated/models/VerifyRequest.ts is excluded by !**/generated/**
  • src/contract/generated/models/index.ts is excluded by !**/generated/**
  • src/contract/generated/runtime.ts is excluded by !**/generated/**
📒 Files selected for processing (379)
  • .claude/launch.json
  • .gitignore
  • .specify/feature.json
  • CLAUDE.md
  • angular.json
  • package.json
  • public/fonts/inter/inter.css
  • public/i18n/en.json
  • public/i18n/vi.json
  • public/styles/splash-screen.css
  • public/zalo.webp
  • scripts/check-contrast.mjs
  • specs/002-operator-consoles/plan.md
  • specs/003-restaurant-onboarding-wizard/checklists/requirements.md
  • specs/003-restaurant-onboarding-wizard/contracts/onboarding-ui-contract.md
  • specs/003-restaurant-onboarding-wizard/data-model.md
  • specs/003-restaurant-onboarding-wizard/plan.md
  • specs/003-restaurant-onboarding-wizard/quickstart.md
  • specs/003-restaurant-onboarding-wizard/research.md
  • specs/003-restaurant-onboarding-wizard/spec.md
  • specs/003-restaurant-onboarding-wizard/tasks.md
  • specs/design/DESIGN.md
  • specs/design/MATERIAL3.md
  • specs/design/TOKENS.md
  • specs/product/ROLE_MATRIX.md
  • specs/ux/NAVIGATION.md
  • specs/ux/SITEMAP.md
  • src/@fuse/components/card/card.component.scss
  • src/@fuse/components/card/card.component.ts
  • src/@fuse/components/masonry/masonry.component.html
  • src/@fuse/components/masonry/masonry.component.ts
  • src/@fuse/fuse.provider.ts
  • src/@fuse/lib/mock-api/index.ts
  • src/@fuse/lib/mock-api/mock-api.constants.ts
  • src/@fuse/lib/mock-api/mock-api.interceptor.ts
  • src/@fuse/lib/mock-api/mock-api.request-handler.ts
  • src/@fuse/lib/mock-api/mock-api.service.ts
  • src/@fuse/lib/mock-api/mock-api.types.ts
  • src/@fuse/lib/mock-api/mock-api.utils.ts
  • src/@fuse/lib/mock-api/public-api.ts
  • src/@fuse/services/config/config.types.ts
  • src/@fuse/services/splash-screen/animation/animator.ts
  • src/@fuse/services/splash-screen/animation/constants.ts
  • src/@fuse/services/splash-screen/animation/easing.ts
  • src/@fuse/services/splash-screen/animation/logo.ts
  • src/@fuse/services/splash-screen/animation/splash-animation.ts
  • src/@fuse/services/splash-screen/animation/storyboard.ts
  • src/@fuse/services/splash-screen/animation/timeline.ts
  • src/@fuse/services/splash-screen/animation/types.ts
  • src/@fuse/styles/_theme-colors.scss
  • src/@fuse/styles/tailwind.scss
  • src/@fuse/styles/themes.scss
  • src/@fuse/styles/user-themes.scss
  • src/@fuse/tailwind/utils/generate-contrasts.js
  • src/app/app.config.ts
  • src/app/app.resolvers.ts
  • src/app/app.routes.ts
  • src/app/core/api/cloudinary-upload.ts
  • src/app/core/api/error-codes.ts
  • src/app/core/api/form-errors.spec.ts
  • src/app/core/api/form-errors.ts
  • src/app/core/api/validators.spec.ts
  • src/app/core/api/validators.ts
  • src/app/core/auth/auth.service.ts
  • src/app/core/auth/permissions/permissions.ts
  • src/app/core/icons/icons.service.ts
  • src/app/core/market/market-selection.service.ts
  • src/app/core/navigation/console-mode.service.ts
  • src/app/core/navigation/navigation.data.ts
  • src/app/core/navigation/navigation.service.ts
  • src/app/core/splash/wait-for-splash.ts
  • src/app/core/user/approval-status.spec.ts
  • src/app/core/user/user.service.ts
  • src/app/core/user/user.types.ts
  • src/app/layout/common/branch-picker/branch-picker.component.html
  • src/app/layout/common/branch-picker/branch-picker.component.ts
  • src/app/layout/common/console-mode/console-mode.component.ts
  • src/app/layout/common/contact-fab/contact-fab.component.html
  • src/app/layout/common/contact-fab/contact-fab.component.scss
  • src/app/layout/common/contact-fab/contact-fab.component.ts
  • src/app/layout/common/draft-order/draft-order-drawer.component.html
  • src/app/layout/common/draft-order/draft-order.component.html
  • src/app/layout/common/draft-order/draft-order.component.ts
  • src/app/layout/common/draft-order/draft-order.demo-data.ts
  • src/app/layout/common/draft-order/draft-order.service.ts
  • src/app/layout/common/draft-order/draft-order.types.ts
  • src/app/layout/common/favorites/favorites-drawer.component.html
  • src/app/layout/common/favorites/favorites-drawer.component.ts
  • src/app/layout/common/favorites/favorites.component.html
  • src/app/layout/common/favorites/favorites.component.ts
  • src/app/layout/common/favorites/favorites.demo-data.ts
  • src/app/layout/common/favorites/favorites.service.ts
  • src/app/layout/common/header-icon-motion.scss
  • src/app/layout/common/languages/languages.component.html
  • src/app/layout/common/languages/languages.component.ts
  • src/app/layout/common/market-picker/market-picker.component.html
  • src/app/layout/common/market-picker/market-picker.component.ts
  • src/app/layout/common/messages/messages.component.html
  • src/app/layout/common/messages/messages.component.ts
  • src/app/layout/common/messages/messages.service.ts
  • src/app/layout/common/messages/messages.types.ts
  • src/app/layout/common/notifications/notification-devices.service.ts
  • src/app/layout/common/notifications/notifications.component.html
  • src/app/layout/common/notifications/notifications.component.ts
  • src/app/layout/common/notifications/notifications.service.ts
  • src/app/layout/common/notifications/notifications.types.ts
  • src/app/layout/common/order-tracking/order-tracking.component.html
  • src/app/layout/common/order-tracking/order-tracking.component.ts
  • src/app/layout/common/order-tracking/order-tracking.demo-data.ts
  • src/app/layout/common/order-tracking/order-tracking.service.ts
  • src/app/layout/common/order-tracking/order-tracking.types.ts
  • src/app/layout/common/quick-buy/quick-buy.component.html
  • src/app/layout/common/quick-buy/quick-buy.component.ts
  • src/app/layout/common/quick-chat/quick-chat.component.html
  • src/app/layout/common/quick-chat/quick-chat.component.scss
  • src/app/layout/common/quick-chat/quick-chat.component.ts
  • src/app/layout/common/quick-chat/quick-chat.service.ts
  • src/app/layout/common/quick-chat/quick-chat.types.ts
  • src/app/layout/common/search/search.component.html
  • src/app/layout/common/search/search.component.ts
  • src/app/layout/common/settings/settings.component.html
  • src/app/layout/common/settings/settings.component.ts
  • src/app/layout/common/shortcuts/shortcuts.service.spec.ts
  • src/app/layout/common/shortcuts/shortcuts.service.ts
  • src/app/layout/common/storefront-footer/storefront-footer-simple.component.html
  • src/app/layout/common/storefront-footer/storefront-footer-simple.component.ts
  • src/app/layout/common/storefront-footer/storefront-footer.component.html
  • src/app/layout/common/storefront-footer/storefront-footer.component.ts
  • src/app/layout/common/storefront-header/storefront-nav-row.component.html
  • src/app/layout/common/storefront-header/storefront-nav-row.component.ts
  • src/app/layout/common/storefront-header/storefront-top-strip.component.html
  • src/app/layout/common/storefront-header/storefront-top-strip.component.ts
  • src/app/layout/common/user/user.component.html
  • src/app/layout/common/user/user.component.ts
  • src/app/layout/layout.component.html
  • src/app/layout/layout.component.ts
  • src/app/layout/layouts/horizontal/centered/centered.component.html
  • src/app/layout/layouts/horizontal/centered/centered.component.ts
  • src/app/layout/layouts/horizontal/enterprise/enterprise.component.html
  • src/app/layout/layouts/horizontal/enterprise/enterprise.component.ts
  • src/app/layout/layouts/horizontal/material/material.component.html
  • src/app/layout/layouts/horizontal/material/material.component.ts
  • src/app/layout/layouts/horizontal/modern/modern.component.html
  • src/app/layout/layouts/horizontal/modern/modern.component.ts
  • src/app/layout/layouts/vertical/classic/classic.component.html
  • src/app/layout/layouts/vertical/classic/classic.component.ts
  • src/app/layout/layouts/vertical/classy/classy.component.html
  • src/app/layout/layouts/vertical/classy/classy.component.ts
  • src/app/layout/layouts/vertical/compact/compact.component.html
  • src/app/layout/layouts/vertical/compact/compact.component.ts
  • src/app/layout/layouts/vertical/dense/dense.component.html
  • src/app/layout/layouts/vertical/dense/dense.component.ts
  • src/app/layout/layouts/vertical/futuristic/futuristic.component.html
  • src/app/layout/layouts/vertical/futuristic/futuristic.component.ts
  • src/app/layout/layouts/vertical/thin/thin.component.html
  • src/app/layout/layouts/vertical/thin/thin.component.ts
  • src/app/mock-api/apps/academy/api.ts
  • src/app/mock-api/apps/academy/data.ts
  • src/app/mock-api/apps/catalog/api.ts
  • src/app/mock-api/apps/catalog/data.ts
  • src/app/mock-api/apps/chat/api.ts
  • src/app/mock-api/apps/chat/data.ts
  • src/app/mock-api/apps/contacts/api.ts
  • src/app/mock-api/apps/contacts/data.ts
  • src/app/mock-api/apps/ecommerce/inventory/api.ts
  • src/app/mock-api/apps/ecommerce/inventory/data.ts
  • src/app/mock-api/apps/file-manager/api.ts
  • src/app/mock-api/apps/file-manager/data.ts
  • src/app/mock-api/apps/help-center/api.ts
  • src/app/mock-api/apps/help-center/data.ts
  • src/app/mock-api/apps/mailbox/api.ts
  • src/app/mock-api/apps/mailbox/data.ts
  • src/app/mock-api/apps/notes/api.ts
  • src/app/mock-api/apps/notes/data.ts
  • src/app/mock-api/apps/scrumboard/api.ts
  • src/app/mock-api/apps/scrumboard/data.ts
  • src/app/mock-api/apps/tasks/api.ts
  • src/app/mock-api/apps/tasks/data.ts
  • src/app/mock-api/common/auth/api.ts
  • src/app/mock-api/common/messages/api.ts
  • src/app/mock-api/common/messages/data.ts
  • src/app/mock-api/common/navigation/api.ts
  • src/app/mock-api/common/navigation/data.ts
  • src/app/mock-api/common/notifications/api.ts
  • src/app/mock-api/common/notifications/data.ts
  • src/app/mock-api/common/search/api.ts
  • src/app/mock-api/common/shortcuts/api.ts
  • src/app/mock-api/common/shortcuts/data.ts
  • src/app/mock-api/common/user/api.ts
  • src/app/mock-api/common/user/data.ts
  • src/app/mock-api/dashboards/analytics/api.ts
  • src/app/mock-api/dashboards/analytics/data.ts
  • src/app/mock-api/dashboards/crypto/api.ts
  • src/app/mock-api/dashboards/crypto/data.ts
  • src/app/mock-api/dashboards/finance/api.ts
  • src/app/mock-api/dashboards/finance/data.ts
  • src/app/mock-api/dashboards/project/api.ts
  • src/app/mock-api/dashboards/project/data.ts
  • src/app/mock-api/index.ts
  • src/app/mock-api/pages/activities/api.ts
  • src/app/mock-api/pages/activities/data.ts
  • src/app/mock-api/ui/icons/api.ts
  • src/app/mock-api/ui/icons/data.ts
  • src/app/modules/admin/admin.routes.ts
  • src/app/modules/admin/admin.service.ts
  • src/app/modules/admin/admin.types.ts
  • src/app/modules/admin/analytics/analytics-dashboard.component.html
  • src/app/modules/admin/analytics/analytics-dashboard.component.ts
  • src/app/modules/admin/analytics/analytics.service.ts
  • src/app/modules/admin/catalog/catalog-admin.service.ts
  • src/app/modules/admin/catalog/categories.component.ts
  • src/app/modules/admin/catalog/market-create.component.html
  • src/app/modules/admin/catalog/market-create.component.ts
  • src/app/modules/admin/catalog/market-edit.component.html
  • src/app/modules/admin/catalog/market-edit.component.ts
  • src/app/modules/admin/catalog/markets.component.ts
  • src/app/modules/admin/catalog/product-create.component.html
  • src/app/modules/admin/catalog/product-create.component.ts
  • src/app/modules/admin/catalog/products.component.html
  • src/app/modules/admin/catalog/products.component.ts
  • src/app/modules/admin/finance/finance-admin.service.ts
  • src/app/modules/admin/finance/finance.component.html
  • src/app/modules/admin/finance/finance.component.ts
  • src/app/modules/admin/finance/finance.types.ts
  • src/app/modules/admin/logistics/delivery-zones-create.component.ts
  • src/app/modules/admin/logistics/delivery-zones.component.ts
  • src/app/modules/admin/logistics/hub-edit.component.html
  • src/app/modules/admin/logistics/hub-edit.component.ts
  • src/app/modules/admin/logistics/hubs.component.ts
  • src/app/modules/admin/logistics/logistics-admin.service.ts
  • src/app/modules/admin/logistics/logistics-admin.types.ts
  • src/app/modules/admin/logistics/route-create.component.html
  • src/app/modules/admin/logistics/route-create.component.ts
  • src/app/modules/admin/logistics/route-detail.component.html
  • src/app/modules/admin/logistics/route-detail.component.ts
  • src/app/modules/admin/logistics/route-status.ts
  • src/app/modules/admin/logistics/routes-list.component.html
  • src/app/modules/admin/logistics/routes-list.component.ts
  • src/app/modules/admin/logistics/vehicles.component.ts
  • src/app/modules/admin/order-groups/order-groups.component.html
  • src/app/modules/admin/order-groups/order-groups.component.ts
  • src/app/modules/admin/orders/order-detail.component.html
  • src/app/modules/admin/orders/order-detail.component.ts
  • src/app/modules/admin/restaurants/restaurant-approval.spec.ts
  • src/app/modules/admin/restaurants/restaurant-detail.component.html
  • src/app/modules/admin/restaurants/restaurant-detail.component.scss
  • src/app/modules/admin/restaurants/restaurant-detail.component.ts
  • src/app/modules/admin/restaurants/restaurants-admin.component.html
  • src/app/modules/admin/restaurants/restaurants-admin.component.ts
  • src/app/modules/admin/settings/settings.component.html
  • src/app/modules/admin/settings/settings.component.ts
  • src/app/modules/admin/users/users-list.component.html
  • src/app/modules/admin/users/users-list.component.ts
  • src/app/modules/auth/brand-panel/auth-brand-panel.component.html
  • src/app/modules/auth/brand-panel/auth-brand-panel.component.ts
  • src/app/modules/auth/confirmation-required/confirmation-required.component.html
  • src/app/modules/auth/confirmation-required/confirmation-required.component.ts
  • src/app/modules/auth/sign-in/sign-in.component.ts
  • src/app/modules/auth/sign-up/sign-up.component.html
  • src/app/modules/auth/sign-up/sign-up.component.scss
  • src/app/modules/auth/sign-up/sign-up.component.ts
  • src/app/modules/cart/cart.component.html
  • src/app/modules/cart/cart.component.scss
  • src/app/modules/cart/cart.component.ts
  • src/app/modules/cart/checkout.component.html
  • src/app/modules/cart/checkout.component.scss
  • src/app/modules/cart/checkout.component.ts
  • src/app/modules/cart/checkout.draft.spec.ts
  • src/app/modules/cart/checkout.slots.spec.ts
  • src/app/modules/cart/checkout.total.spec.ts
  • src/app/modules/catalog/catalog.component.html
  • src/app/modules/catalog/catalog.component.scss
  • src/app/modules/catalog/catalog.component.ts
  • src/app/modules/catalog/catalog.demo-data.ts
  • src/app/modules/catalog/catalog.routes.ts
  • src/app/modules/catalog/catalog.service.spec.ts
  • src/app/modules/catalog/catalog.service.ts
  • src/app/modules/catalog/catalog.types.ts
  • src/app/modules/catalog/pages/product-detail/product-detail.component.html
  • src/app/modules/catalog/pages/product-detail/product-detail.component.ts
  • src/app/modules/home/home.component.html
  • src/app/modules/home/home.component.scss
  • src/app/modules/home/home.component.ts
  • src/app/modules/orders/confirm-preview.spec.ts
  • src/app/modules/orders/confirm-preview.ts
  • src/app/modules/orders/orders-history-page.component.html
  • src/app/modules/orders/orders-history-page.component.ts
  • src/app/modules/orders/orders-list.component.html
  • src/app/modules/orders/orders-list.component.scss
  • src/app/modules/orders/orders-list.component.ts
  • src/app/modules/orders/orders.routes.ts
  • src/app/modules/orders/orders.service.spec.ts
  • src/app/modules/orders/orders.service.ts
  • src/app/modules/orders/orders.types.ts
  • src/app/modules/orders/orders.validation.ts
  • src/app/modules/orders/pages/order-detail/order-detail.component.html
  • src/app/modules/orders/pages/order-detail/order-detail.component.ts
  • src/app/modules/pages/placeholder-page.component.ts
  • src/app/modules/restaurant/account-area-nav.ts
  • src/app/modules/restaurant/account-info/account-info.component.html
  • src/app/modules/restaurant/account-info/account-info.component.ts
  • src/app/modules/restaurant/account-shell/account-shell.component.html
  • src/app/modules/restaurant/account-shell/account-shell.component.scss
  • src/app/modules/restaurant/account-shell/account-shell.component.ts
  • src/app/modules/restaurant/business-profile/business-profile-form.component.html
  • src/app/modules/restaurant/business-profile/business-profile-form.component.scss
  • src/app/modules/restaurant/business-profile/business-profile-form.component.ts
  • src/app/modules/restaurant/business-profile/pickup-window.validator.spec.ts
  • src/app/modules/restaurant/business-profile/pickup-window.validator.ts
  • src/app/modules/restaurant/credit/credit.component.html
  • src/app/modules/restaurant/credit/credit.component.ts
  • src/app/modules/restaurant/credit/restaurant-credit.service.spec.ts
  • src/app/modules/restaurant/credit/restaurant-credit.service.ts
  • src/app/modules/restaurant/credit/restaurant-credit.types.ts
  • src/app/modules/restaurant/dashboard/restaurant-dashboard.component.html
  • src/app/modules/restaurant/dashboard/restaurant-dashboard.component.scss
  • src/app/modules/restaurant/dashboard/restaurant-dashboard.component.ts
  • src/app/modules/restaurant/delivery-addresses/delivery-addresses.component.html
  • src/app/modules/restaurant/delivery-addresses/delivery-addresses.component.scss
  • src/app/modules/restaurant/delivery-addresses/delivery-addresses.component.ts
  • src/app/modules/restaurant/delivery-windows.spec.ts
  • src/app/modules/restaurant/delivery-windows.ts
  • src/app/modules/restaurant/invoices/invoices-list.component.html
  • src/app/modules/restaurant/invoices/invoices-list.component.ts
  • src/app/modules/restaurant/invoices/invoices.routes.ts
  • src/app/modules/restaurant/invoices/pages/invoice-detail/invoice-detail.component.html
  • src/app/modules/restaurant/invoices/pages/invoice-detail/invoice-detail.component.ts
  • src/app/modules/restaurant/invoices/restaurant-invoices.service.ts
  • src/app/modules/restaurant/invoices/restaurant-invoices.status.ts
  • src/app/modules/restaurant/invoices/restaurant-invoices.types.ts
  • src/app/modules/restaurant/onboarding/onboarding-step.contract.ts
  • src/app/modules/restaurant/onboarding/onboarding.component.html
  • src/app/modules/restaurant/onboarding/onboarding.component.scss
  • src/app/modules/restaurant/onboarding/onboarding.component.spec.ts
  • src/app/modules/restaurant/onboarding/onboarding.component.ts
  • src/app/modules/restaurant/onboarding/onboarding.routes.ts
  • src/app/modules/restaurant/onboarding/review-step.component.html
  • src/app/modules/restaurant/onboarding/review-step.component.ts
  • src/app/modules/restaurant/profile.component.html
  • src/app/modules/restaurant/profile.component.scss
  • src/app/modules/restaurant/profile.component.spec.ts
  • src/app/modules/restaurant/profile.component.ts
  • src/app/modules/restaurant/profile.routes.ts
  • src/app/modules/restaurant/restaurant-profile.service.spec.ts
  • src/app/modules/restaurant/restaurant-profile.service.ts
  • src/app/modules/restaurant/restaurant-profile.types.ts
  • src/app/modules/restaurant/scheduled-orders/scheduled-orders.component.html
  • src/app/modules/restaurant/scheduled-orders/scheduled-orders.component.scss
  • src/app/modules/restaurant/scheduled-orders/scheduled-orders.component.ts
  • src/app/modules/restaurant/scheduled-orders/scheduled-orders.service.ts
  • src/app/modules/restaurant/scheduled-orders/scheduled-orders.types.ts
  • src/app/modules/restaurant/settings/settings-page.component.html
  • src/app/modules/restaurant/settings/settings-page.component.ts
  • src/app/modules/restaurant/settings/settings.routes.ts
  • src/app/modules/restaurant/setup/setup-checklist.component.html
  • src/app/modules/restaurant/setup/setup-checklist.component.ts
  • src/app/modules/restaurant/setup/setup-completion.service.spec.ts
  • src/app/modules/restaurant/setup/setup-completion.service.ts
  • src/app/modules/restaurant/setup/setup.types.ts
  • src/app/modules/restaurant/tax-profile/tax-profile-form.component.html
  • src/app/modules/restaurant/tax-profile/tax-profile-form.component.scss
  • src/app/modules/restaurant/tax-profile/tax-profile-form.component.ts
  • src/app/modules/shop/shop.component.html
  • src/app/modules/shop/shop.component.scss
  • src/app/modules/shop/shop.component.ts
  • src/app/modules/wishlist/wishlist.component.html
  • src/app/modules/wishlist/wishlist.component.ts
  • src/app/shared/product-card/product-card.component.html
  • src/app/shared/product-card/product-card.component.scss
  • src/app/shared/product-card/product-card.component.ts
  • src/app/shared/product-card/product-card.types.ts
  • src/contract/index.ts
  • src/contract/openapi.json
  • src/contract/raw.ts
  • src/index.html
  • src/main.ts
  • src/styles/styles.scss
  • src/styles/vendors.scss
  • tailwind.config.js

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@kody-ai

kody-ai Bot commented Aug 4, 2026

Copy link
Copy Markdown

Code Review Could Not Complete ⚠️

The review failed before suggestions could be generated.

Reason: The configured API key (google_gemini) is out of credits or has hit its billing limit. Top up the account or adjust the plan.

After fixing the issue, comment @kody review on this PR to re-run the review.

Kody Guide: Usage and Configuration
Interacting with Kody
  • Request a Review: Ask Kody to review your PR manually by adding a comment with the @kody start-review command at the root of your PR.

  • Validate Business Logic: Ask Kody to validate your code against business rules by adding a comment with the @kody -v business-logic command.

  • Provide Feedback: Help Kody learn and improve by reacting to its comments with a 👍 for helpful suggestions or a 👎 if improvements are needed.

Current Kody Configuration
Review Options

The following review options are enabled or disabled:

Options Enabled
Bug
Performance
Security
Business Logic

Access your configuration settings here.

@laithanhhung
laithanhhung merged commit 4d87fa9 into dev Aug 4, 2026
3 of 4 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant