Commit Graph
89 Commits
Author SHA1 Message Date
Ruslan Bakiev a74e75049c Adopt logistics visual system across webapp 2026-04-11 08:31:34 +07:00
Ruslan Bakiev b7f452cdd1 fix: make explore navigation explicit and add route loading indicator 2026-03-14 10:59:02 +07:00
Ruslan Bakiev fcc22b4051 fix: make home hero static and keep capsule scroll motion 2026-03-12 16:05:27 +07:00
Ruslan Bakiev 29c34a048a fix: migrate geo GraphQL queries and frontend to camelCase
Build Docker Image / build (push) Successful in 5m0s
Geo backend was migrated to camelCase but frontend .graphql files and
component code still used snake_case, causing 400 errors on all geo API calls.
2026-03-10 14:10:23 +07:00
Ruslan Bakiev 25f946b293 Fix geo GraphQL schema mismatch: camelCase → snake_case
Build Docker Image / build (push) Successful in 5m46s
All geo .graphql operations and consuming code updated to match
server schema which uses snake_case field/argument names.
Removed non-existent QuoteCalculations query, using NearestOffers instead.
2026-03-09 21:45:57 +07:00
Ruslan Bakiev 8ff44c42bc Keep view when closing select
Build Docker Image / build (push) Successful in 4m59s
2026-02-07 16:40:30 +07:00
Ruslan Bakiev a73a801a1d Make pins explicit and selection open info
Build Docker Image / build (push) Successful in 5m24s
2026-02-07 13:56:36 +07:00
Ruslan Bakiev 2d54dc3283 Raise hubs/suppliers list page size to 500
Build Docker Image / build (push) Successful in 4m58s
2026-02-07 13:34:07 +07:00
Ruslan Bakiev d36409df57 Refetch hubs/suppliers on product filter
Build Docker Image / build (push) Has been cancelled
2026-02-07 13:29:17 +07:00
Ruslan Bakiev 87d3d5b1a7 Force offers view when hub or supplier selected
Build Docker Image / build (push) Successful in 4m59s
2026-02-07 13:18:36 +07:00
Ruslan Bakiev 1c033a55b4 Update geo GraphQL generated types
Build Docker Image / build (push) Successful in 4m54s
2026-02-07 13:11:27 +07:00
Ruslan Bakiev 481a38b3a1 Keep select param on navigation and toggles
Build Docker Image / build (push) Successful in 5m5s
2026-02-07 12:14:00 +07:00
Ruslan Bakiev c0466c7234 Update geo GraphQL generated types
Build Docker Image / build (push) Successful in 5m23s
2026-02-07 11:08:15 +07:00
Ruslan Bakiev 2fb34f664f Use graph-based offers and remove radius filters
Build Docker Image / build (push) Has been cancelled
2026-02-07 11:06:00 +07:00
Ruslan Bakiev 28eff7c323 feat(catalog): pad map fit and graph hubs filter
Build Docker Image / build (push) Successful in 5m4s
2026-02-07 10:18:07 +07:00
Ruslan Bakiev 755a92d194 feat(catalog): filter map clusters by chips
Build Docker Image / build (push) Successful in 5m1s
2026-02-07 08:35:22 +07:00
Ruslan Bakiev 2d85e7187e chore(codegen): refresh geo graphql types
Build Docker Image / build (push) Successful in 4m56s
2026-02-06 19:48:45 +07:00
Ruslan Bakiev c5d1dc87ae Clear quantity when switching to explore
Build Docker Image / build (push) Failing after 20s
2026-02-06 19:10:17 +07:00
Ruslan Bakiev 2939482fc3 Add quote calculations support
Build Docker Image / build (push) Failing after 23s
2026-02-06 19:07:20 +07:00
Ruslan Bakiev 161a1426e4 Sync selection list with map view toggle
Build Docker Image / build (push) Has been cancelled
2026-02-06 14:33:54 +07:00
Ruslan Bakiev 71a27a4ab9 Improve nearest hubs layout and show distance
Build Docker Image / build (push) Successful in 4m49s
2026-02-05 19:24:03 +07:00
Ruslan Bakiev beb02bd3fc Use offer result cards in catalog and compute routes for supplier offers
Build Docker Image / build (push) Successful in 5m50s
2026-02-05 19:02:26 +07:00
Ruslan Bakiev f1eb7bc746 Use graph-based nearest hubs
Build Docker Image / build (push) Successful in 6m46s
2026-02-05 18:41:14 +07:00
Ruslan Bakiev 7f8a148aa7 feat(catalog): add KYC teaser section to supplier InfoPanel
Build Docker Image / build (push) Successful in 4m6s
- Add KYC teaser info section (companyType, registrationYear, status, sourcesCount)
- Use mock data for now (backend integration TBD)
- Add 'open-kyc' emit for full profile navigation
- Add kycProfileUuid field to InfoEntity type
- Add i18n translations for both RU and EN
2026-01-27 12:30:00 +07:00
Ruslan Bakiev 2dbe600d8a refactor: remove all any types, add strict GraphQL scalar typing
Build Docker Image / build (push) Successful in 4m3s
- Add strictScalars: true to codegen.ts with proper scalar mappings
  (Date, Decimal, JSONString, JSON, UUID, BigInt → string/Record)
- Replace all ref<any[]> with proper GraphQL-derived types
- Add type guards for null filtering in arrays
- Fix bugs exposed by typing (locationLatitude vs latitude, etc.)
- Add interfaces for external components (MapboxSearchBox)

This enables end-to-end type safety from GraphQL schema to frontend.
2026-01-27 11:34:12 +07:00
Ruslan Bakiev 20e0e73c58 refactor: remove any types and fix TypeScript errors
Build Docker Image / build (push) Successful in 3m59s
- Export InfoProductItem, InfoHubItem, InfoSupplierItem, InfoOfferItem types
- Update InfoEntity interface to have explicit fields (no index signature)
- Export CatalogHubItem, CatalogNearestHubItem from useCatalogHubs
- Fix MapItem interfaces to accept nullable GraphQL types
- Fix v-for :key bindings to handle null uuid
- Add null guards in select-location pages
- Update HubCard to accept nullable transportTypes
- Add shims.d.ts for missing module declarations
2026-01-27 10:35:14 +07:00
Ruslan Bakiev 9210f79a3d Always include mode query param (explore/quote)
Build Docker Image / build (push) Successful in 4m29s
2026-01-27 10:21:09 +07:00
Ruslan Bakiev 70c53da8eb Fix type safety in catalog composables + 3 InfoPanel bugs
Build Docker Image / build (push) Successful in 3m42s
- Add proper codegen types to all catalog composables:
  - useCatalogHubs: HubItem, NearestHubItem
  - useCatalogSuppliers: SupplierItem, NearestSupplierItem
  - useCatalogProducts: ProductItem
  - useCatalogOffers: OfferItem
  - useCatalogInfo: InfoEntity, ProductItem, HubItem, OfferItem

- Fix InfoPanel bugs for offers:
  - Use locationLatitude/locationLongitude for offer coordinates
  - Enrich entity with supplierName after loading profile
  - Apply-to-filter now adds both product AND hub for offers

- Filter null values from GraphQL array responses
- Add type-safe coordinate helper (getEntityCoords)
- Fix urlBounds type inference in useCatalogSearch
2026-01-26 23:30:16 +07:00
Ruslan Bakiev 19aca61845 fix(catalog): prevent unnecessary list reloads on map movement
Build Docker Image / build (push) Successful in 4m14s
- Remove currentMapBounds from watch - it changes on every map move
- Watch only filterByBounds and urlBounds (URL-based state)
- Add early return in setBoundsFilter if bounds haven't changed

This fixes the issue where the list was reloading on every map movement
even when the 'filter by bounds' checkbox was OFF.
2026-01-26 22:24:47 +07:00
Ruslan Bakiev 6545eeabea feat(catalog): persist bounds filter state in URL
Build Docker Image / build (push) Successful in 4m14s
- Add urlBounds and filterByBounds computed from URL query
- Add setBoundsInUrl and clearBoundsFromUrl actions
- Update index.vue to use URL-based bounds state
- Bounds written to URL as comma-separated values (west,south,east,north)

This enables sharing links with map viewport bounds filter.
2026-01-26 21:40:44 +07:00
Ruslan Bakiev f9eb027ebd chore: regenerate geo GraphQL types with bounds params
Build Docker Image / build (push) Has been cancelled
2026-01-26 21:38:44 +07:00
Ruslan Bakiev b02e3882cc feat(catalog): add bounds filtering to list queries
Build Docker Image / build (push) Has been cancelled
- Add west/south/east/north params to HubsList, SuppliersList, ProductsList GraphQL
- Update useCatalogHubs to pass bounds to query
- Update useCatalogSuppliers to pass bounds to query
- Update useCatalogProducts to pass bounds to query
2026-01-26 21:37:23 +07:00
Ruslan Bakiev e905098cb5 refactor(catalog): replace InfoPanel tabs with vertical sections
Build Docker Image / build (push) Successful in 3m57s
- Remove all tabs from InfoPanel, use stacked sections instead
- Load suppliers (for hub) and hubs (for supplier) immediately
- Show entity header as text, not card
- Simplify relatedPoints to show all points on map
- Add translations for new section titles
2026-01-26 19:34:04 +07:00
Ruslan Bakiev 3f56a2f117 feat(catalog): add loading states for InfoPanel tabs and filter map by active tab
Build Docker Image / build (push) Successful in 3m35s
- Add separate loading states for products, hubs, suppliers, offers
- Show spinner on tabs while loading, disable tab during load
- Filter relatedPoints on map by current active tab
2026-01-26 17:49:59 +07:00
Ruslan Bakiev f680740f52 Center MainNav vertically on home hero, add fading title
Build Docker Image / build (push) Successful in 3m47s
2026-01-26 17:24:08 +07:00
Ruslan Bakiev 11a52003e7 Make hero scroll linear - direct 1:1 scroll to height/opacity
Build Docker Image / build (push) Successful in 3m55s
2026-01-26 16:29:20 +07:00
Ruslan Bakiev cecbed99b5 Add hero section to home page with scroll collapse
Build Docker Image / build (push) Failing after 50s
- Full-screen dark gradient hero on home page
- Search input centered vertically
- Smooth collapse to fixed header on scroll
- Added hero translations (ru/en)
2026-01-26 16:12:00 +07:00
Ruslan Bakiev f973784257 Add URL params for InfoPanel tab and product (infoTab, infoProduct)
Build Docker Image / build (push) Successful in 3m39s
2026-01-26 15:55:25 +07:00
Ruslan Bakiev 2275f956ae Fix: hide mode toggle on home page, store mapViewMode in URL
Build Docker Image / build (push) Successful in 3m56s
2026-01-26 15:44:44 +07:00
Ruslan Bakiev 6b359b177c Fix: trigger reactivity when setting filter labels
Build Docker Image / build (push) Successful in 3m44s
2026-01-26 15:35:05 +07:00
Ruslan Bakiev 1c298951b1 Fix: entity type detection in selectProduct, handle offer in add-to-filter
Build Docker Image / build (push) Successful in 3m47s
2026-01-26 15:29:17 +07:00
Ruslan Bakiev 0efc4eddfd Simplify catalog UI - remove chips, add drawer for list
Build Docker Image / build (push) Successful in 3m59s
- Remove product/hub chips from QuoteForm.vue (duplicate of toggle)
- Add drawer state to useCatalogSearch.ts (isDrawerOpen, selectDrawerItem, applyDrawerFilter)
- Convert SelectionPanel to drawer with header, scrollable content, and footer
- Add "Список" button to CatalogPage.vue to open drawer
- Add "Применить фильтр" button in drawer footer
- Add slide animations for drawer (left on desktop, up on mobile)
- Update translations: catalog.list, catalog.applyFilter
2026-01-26 14:36:42 +07:00
Ruslan Bakiev 65b07271d9 Simplify GEO API - use new list endpoints and routes in nearestOffers
Build Docker Image / build (push) Successful in 4m11s
- Replace GetNodesDocument with HubsListDocument in useCatalogHubs.ts
- Replace GetSupplierProfilesDocument with SuppliersListDocument in useCatalogSuppliers.ts
- Replace manual grouping with ProductsListDocument in useCatalogProducts.ts
- Update nearestOffers to pass hubUuid for server-side route calculation
- Remove RouteToCoordinate calls - routes now included in nearestOffers response
- Delete 15 obsolete GraphQL files
- Add 3 new list endpoints: HubsList, SuppliersList, ProductsList
- Fix TypeScript errors in CalcResultContent, LocationsContent, hubs page, location store
2026-01-26 14:08:21 +07:00
Ruslan Bakiev 2b6cccdead Fix all TypeScript errors and remove Storybook
Build Docker Image / build (push) Successful in 5m8s
- Remove all Storybook files and configuration
- Add type declarations for @vueuse/core, @formkit/core, vue3-apexcharts
- Fix TypeScript configuration (typeRoots, include paths)
- Fix Sentry config - move settings to plugin
- Fix nullable prop assignments with ?? operator
- Fix type narrowing issues with explicit type assertions
- Fix Card component linkable computed properties
- Update codegen with operationResultSuffix
- Fix GraphQL operation type definitions
2026-01-26 00:32:36 +07:00
Ruslan Bakiev b326d8cd76 Fix supplierUuid -> uuid parameter in GetSupplierProfile call
Build Docker Image / build (push) Successful in 3m32s
2026-01-25 22:38:59 +07:00
Ruslan Bakiev ed7dec304f Update geo GraphQL types after backend fixes
Build Docker Image / build (push) Successful in 3m25s
2026-01-25 22:20:47 +07:00
Ruslan BakievandClaude Sonnet 4.5 cc52aa6179 Fix supplier info and catalog filtering bugs
Build Docker Image / build (push) Successful in 3m22s
1. Add latitude/longitude to GetSupplierProfile query
   - Without coordinates, supplier merge overwrites geo node data
   - Causes "Supplier has no coordinates" warning and no offers loading
   - Affects: useCatalogInfo.ts loadSupplierInfo() and useCatalogProducts.ts fetchProducts()

2. Add bounds validation in catalog composables
   - Validate bounds coordinates before passing to GraphQL or using in filters
   - Prevents 400 errors when bounds contain NaN/undefined/Infinity
   - Fixed in: useCatalogHubs.ts and useCatalogSuppliers.ts

Fixes:
- https://optovia.ru/catalog?info=supplier:c7f2e3f1-b16a-423d-a947-359e30858d94
- https://optovia.ru/catalog?select=hub 400 error

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-25 21:01:23 +07:00
Ruslan BakievandClaude Sonnet 4.5 50375f2a74 Refactor catalog to use coordinate-based GraphQL endpoints
Build Docker Image / build (push) Successful in 3m33s
Replace entity-specific queries (GetProductsNearHub, GetOffersByHub, GetHubsForProduct, GetSuppliersForProduct) with unified coordinate-based endpoints (NearestHubs, NearestOffers, NearestSuppliers, RouteToCoordinate). This simplifies backend architecture from 18 to 8 core endpoints while maintaining identical UI/UX behavior.

All composables and pages now use coordinates + client-side grouping instead of specialized backend queries. For global product filtering, uses center point (0,0) with 20000km radius.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-25 17:39:33 +07:00
Ruslan Bakiev 7403d4f063 Add coordinate-based GraphQL operations for geo API
Build Docker Image / build (push) Successful in 3m31s
- Add NearestHubs.graphql - find hubs near coordinates
- Add NearestOffers.graphql - find offers near coordinates
- Add NearestSuppliers.graphql - find suppliers near coordinates
- Add RouteToCoordinate.graphql - route from offer to coordinates
- Regenerate geo-generated.ts with new operations

These operations simplify frontend logic by working with coordinates
instead of requiring entity-specific queries.
2026-01-25 17:28:40 +07:00
Ruslan Bakiev 39c3d24b3a Fix Info panel - translations, two-step offers flow, icon, add to filter
Build Docker Image / build (push) Successful in 3m36s
- Add i18n translations for entities, tabs, and info sections (EN/RU)
- Refactor offers tab to two-step flow (products → offers) for Hub/Supplier
- Replace entity badge with circular icon in header
- Fix "Add to filter" button with name fallback and proper cleanup
- Update selectItem() to clear info param when adding to filter
2026-01-25 16:44:00 +07:00