Bỏ qua để đến nội dung

All versions since 21.1.0

21.1.0

  • chore: four guardrails against code being wrong while tests stay green (#1430)
  • chore(green-index-feature-list): declare spec stub selector exception in lint config
  • chore(skills): name the Wink Bug Tracker instead of printing its project number (#1438)
  • docs: :memo: translations
  • docs: document the host:{role:‘presentation’}+display:contents list-item pattern (#1445)
  • docs: document the wink/* lint rules
  • docs: require Storybook and Playwright verification for visual fixes
  • docs(i18n): clarify en.json path is per-app
  • docs(selector-prefix-cleanup): correct a wrong claim about seller-url (#1152)
  • feat(bamboo): :sparkles: add Bamboo Specs export for WP-AP (Production Applications)
  • feat(bamboo): :sparkles: add Bamboo Specs export for WS-SA (Staging Applications)
  • feat(ledger): admin entry detail and booking money trail (#1468)
  • feat(ledger): admin ledger account list and account statement (#1460)
  • feat(ledger): admin ledger explorer (#1458)
  • feat(signal-form): ban [formField] on the four field-bound controls (#1434)
  • fix: close CI coverage debt from 0%-cache-hit run, plus 4 real bugs found along the way (#1417)
  • fix(admin,portals): bulk action feedback + studio Cards nav highlight (#1407)
  • fix(admin): restore bulk selection on a failed status update (#1464)
  • fix(admin): warn on partial bulk status update instead of reporting full success (#1416)
  • fix(analytics): disable animation on gradient-stacked-area-chart series (#1463)
  • fix(book): catch dismissed rejection on hotel and booking-flow modals (#1451) (#1462)
  • fix(booking,maps): resend on arrival day, ungate dual-axis status, opt-in marker clicks (#1406)
  • fix(deps): correct ten peerDependency declarations so lint —all is clean again (#1440)
  • fix(e2e-utils): attach cause to re-thrown package.json read error
  • fix(e2e): start dev servers via npm script so @nx/playwright stops warning (#1412)
  • fix(embed): point the seven embed snippets at where a client ID is obtained (#1444)
  • fix(i18n): add missing TranslocoService mock stubs, fix book-flow assertion (#1411)
  • fix(i18n): add the 56 link-manager keys missing from portal’s bundle (#1441)
  • fix(ledger): correct the admin and portal ledger screens’ API contract (#1455)
  • fix(managed-social): open the post grid on upcoming posts instead of the oldest ones (#1419)
  • fix(media): require a folder or managingEntityId for every cloudinary upload (#1423)
  • fix(property): drop the two RESAVENUE spec references left after its removal
  • fix(routing): point fourteen dead absolute router links at routes that exist (#1435)
  • fix(shared): resolve grid and table pagination summary through i18n (#1422)
  • fix(social-list): give active-status toggle an accessible name
  • fix(social-list): point the mobile Link Manager nav at routes that exist (#1424)
  • fix(social-list): render a fallback thumbnail for youtube/tiktok/spotify/instagram winklinks (#1418)
  • fix(social-list): settle the last five dead router links and promote the rule to error (#1439)
  • fix(social-list): stop double-wrapping the loading skeleton in an extra li
  • fix(social-list): use role=presentation + display:contents for list-view
  • s (#1442)
  • fix(social-list): wire defaultTheme into main.ts instead of dark portalTheme fallback
  • fix(toast): send the WinkLinks syndication toast to the portal Link Manager (#1426)
  • fix(tools): make the last two wink rules’ comment stripping string-aware (#1436)
  • fix(workbench): remove stale googleMapsLoaded binding from settings story
  • fix(workspace-generators): tolerate ProjectGraphError from removeGenerator in absorb-component tests
  • refactor: :fire: removed RESAVENUE
  • refactor(signal-form): bind controls to the field directly so option lists are type-checked (#1432)

21.2.0

  • chore(deps): drop unused @ionic/cli and pin vulnerable build tooling
  • docs: :globe_with_meridians: translations
  • docs: correct stale claim that typecheck isn’t wired into CI yet
  • docs: require claiming an issue before working on it
  • feat(#1477): :sparkles: show Stripe pass-through fees and negative ledger balances (#1530)
  • feat(admin): give the ledger nav its own feature flag (#1485)
  • feat(e2e): add admin-e2e project (#1467) (#1478)
  • feat(shared): add createFeatureSelectorWithFallback helper (#1527) (#1529)
  • fix: guard unregistered feature selectors on all remaining domains (#1544)
  • fix: repair 7 CI test failures across two unrelated stale-mock bugs
  • fix: sync peerDependencies via sync-package-versions script
  • fix: sync peerDependencies with actual imports on 5 lint-failing libs
  • fix(#1534): stop the refunded pass-through panel reading as two Stripe charges (#1539)
  • fix(#1540): bring every theme colour pair up to WCAG AA (#1543)
  • fix(access,social-list): gate Link Manager routes on the ACL (#1508)
  • fix(admin-e2e): correct wrong admin staging/production domain
  • fix(admin): clamp grid skip when a reload lands on a now-empty page (#1505)
  • fix(administration): declare missing util-select-from-route peer dep
  • fix(analytics,shared): shares loading flag, Instagram window note, i18n analytics strings (#1516)
  • fix(analytics): guard unregistered feature selectors on analytics domain (#1535)
  • fix(authentication): jitter the aborted-GET retry delay
  • fix(authentication): retry aborted GET requests once
  • fix(book): guard TitleEffects against a mid-navigation snapshot read (#1490)
  • fix(book): replace remaining transloco pipe sites with the directive (#1514)
  • fix(booking): rename Stripe fee labels and complete Net Rate once known (#1552) (#1556)
  • fix(booking): show refunds in the booking grids and their CSV exports (#1558)
  • fix(extranet,automate,studio,payment-portal): gate remaining sidebar routes on the ACL (#1510)
  • fix(geo-name): guard unregistered feature selectors on geo-name domain and publisher (#1532)
  • fix(google-tag-manager): log and skip GA4 items on missing room/price instead of throwing (#1521)
  • fix(inventory-supplier): guard unregistered feature selectors on inventory-supplier domain (#1537)
  • fix(inventory,web-components): scope hotel-card loading/error state per identifier (#1512)
  • fix(inventory): escape # and : in cloudinary text overlays (#1483) (#1495)
  • fix(inventory): guard unregistered feature selectors on inventory domain (#1533)
  • fix(inventory): partition static-inventory-grid store per curated list, not one flat scalar (#1500)
  • fix(logging): fix logger.error(, error) antipattern at 4 remaining sites (#1491)
  • fix(logging): give Sentry a real Error at every toast-effects failure site (#1488)
  • fix(managed-social): cancel superseded grid/search requests instead of merging them (#1501)
  • fix(managed-social): stop the post grid’s initial load from merging stale posts (#1492)
  • fix(managing-entity,user,lead): switch admin grid$ effects to switchMap (#1507)
  • fix(managing-entity): extract selectManagingEntity-from-route effect (#1548)
  • fix(managing-entity): fall back to cookie/first entity when meid is unresolvable (#1515)
  • fix(managing-entity): generalize selectManagingEntityFromRoute to accept a dispatcher (#1551)
  • fix(managing-entity): surface load errors and fix TZ-flaky pipe test
  • fix(meta): guard unregistered feature selectors on meta domain (#1538)
  • fix(payment-admin): guard unregistered feature selectors on payment-admin domain (#1542)
  • fix(payment-admin): show the booking lifecycle status, not a stringified object (#1561)
  • fix(payment-admin): wire the missing bank-account create/edit routes (#1546)
  • fix(payment-portal): guard unregistered feature selectors on payment-portal domain (#1541)
  • fix(payment-widget): log per-failure Stripe decline reason, stop success event on error (#1523)
  • fix(payment-widget): reset capturingFunds and surface error when Stripe confirm() rejects (#1525)
  • fix(portal): guard unregistered feature selectors on inventory search (#1526)
  • fix(rate-plan): stop restriction toggles defaulting on in edit mode (#1557)
  • fix(rate-verifier): guard undefined map before reading occupancy fields (#1518)
  • fix(review,inventory-supplier): cancel superseded grid-page requests instead of merging responses (#1499)
  • fix(review,inventory-supplier): pair loading indicator start/stop on canceled requests (#1503)
  • fix(review,inventory-supplier): replace grid entities on load-success instead of merging (#1496)
  • fix(shortened-url,social-list): remove fabricated per-link click counts (#1513)
  • fix(social-list): guard unregistered feature selectors on social-list domain (#1536)
  • fix(social-list): return post-SSO login to the page the user came from (#1562)
  • fix(special-rate): wait for server confirmation before navigating/trusting a save (#1560)
  • fix(travel-inventory): stop add-on page crashing when a price is cleared (#1555)
  • fix(webhook): guard unregistered feature selectors on webhook publisher (#1531)
  • fix(workbench): satisfy Store dep and gravatar fixture in admin feature-decorator story (#1504)
  • refactor(e2e): extract shared modal-focus dialog-trap helper (#1511)
  • refactor(inventory): migrate theme-one pipes to @cloudinary/url-gen (#1481)
  • test(e2e): add tsconfig.spec.json so 6 projects get a typecheck target (#1520)

21.3.0 Latest

  • chore(workbench): add Storybook MCP addon, document Sentry read-token usage
  • docs: :globe_with_meridians: localization updates
  • docs: add implementation plan for the #1629 unknown-error-fallback migration
  • docs(bamboo): keep specs mirroring live plans (#1697)
  • feat(eslint-rules): add wink/no-orphaned-route-providers rule (#1528) (#1572)
  • feat(skills): add fix-with-model complexity label to wink-file-bug
  • feat(special-rate): add geo-location radius promotion qualifier (#1581)
  • fix: adopt toErrorWithMessage across effects catchError handlers (#1629) (#1631)
  • fix: sync peerDependencies with actual imports in four libraries
  • fix(administration): add refund-eligible Issue refund button in admin (#1600)
  • fix(administration): drop duplicate grid-load dispatch on lead/event routes
  • fix(administration): force raster rendering on the coverage map (#1571)
  • fix(administration): give admin “Cancel booking” its own real cancel flow (#1608)
  • fix(analytics): stop gradient area chart crashing on hover (#1487) (#1580)
  • fix(application): fix mergeEnvironments type inference and testing-utils build
  • fix(auth): restore serialization of concurrent discovery-document loads (#1627)
  • fix(authentication): guard OIDC discovery document against a null body (#1578)
  • fix(book): stop reporting the Sojern pixel’s own load failures (#1609)
  • fix(e2e): silence dotenv banner so nx json output stays parseable
  • fix(error-handler): filter CefSharp/Outlook-SafeLinks promise-rejection noise (#1601)
  • fix(error-handler): filter unattributable errors from partner GTM containers (#1628)
  • fix(google-tag-manager): guard resetDataLayer against a stubbed GTM helper (#1607)
  • fix(google-tag-manager): sweep analytics mapper throw sites to warn+skip (#1579)
  • fix(inventory): resolve theme-one banner icon title through transloco (#1573)
  • fix(managing-entity): cast loadStripe through unknown before jest.Mock
  • fix(managing-entity): stop Stripe element mount racing component destroy (#1584)
  • fix(payment-admin): darken dashboard rank column for WCAG AA contrast (#1570)
  • fix(payment-admin): darken ledger accounts subtext for WCAG AA contrast (#1569)
  • fix(payment-admin): gate refund eligibility in BookingContractRefundFormComponent itself (#1606)
  • fix(payment-admin): sequence aggregate resource loads, fix ledger contrast (#1632)
  • fix(payment-portal): migrate booking-funds dashboard to per-currency AccountAggregateFunds list (#1636)
  • fix(payment-widget): stop Stripe element mount racing component destroy (#1589)
  • fix(portals): start home hero typewriter once #typewriterEl renders (#1637)
  • fix(property): block deletion when the usage check fails (#1648)
  • fix(rate-plan,special-rate): fix removeMany typing that broke storybook build
  • fix(rate-plan): declare rxjs peer dependency on feature-rate-plan-form
  • fix(rate-plan): replace cached entity on server response instead of merging (#1646) (#1654)
  • fix(rate-plan): wait for server confirmation before leaving the editor (#1645) (#1652)
  • fix(receipt): raise the contrast of the not-found card header (#1696)
  • fix(restaurant): surface why a restaurant stays a draft (#766) (#1585)
  • fix(router): recover from a failed lazy-chunk import instead of reporting it (#1615)
  • fix(router): regenerate stale route manifest and app-route type
  • fix(sentry): stop shallow environment merge from dropping tracing config (#1614)
  • fix(shared-styles): retune semantic colors for AA text contrast (#1545) (#1574)
  • fix(shared): stop the WinkLinks timeframe picker pretending to work (#1616)
  • fix(special-rate): drop switched-off inventory qualifiers from the payload (#1698)
  • fix(special-rate): replace cached entity on server response instead of merging (#1683)
  • fix(state): replace cached entity on server response in 26 ngrx stores (#1682) (#1684)
  • fix(travel-inventory): require an image, not just any upload, to publish (#1590)
  • fix(ui): raise contrast of money amounts, info badges and the amber refund badge (#1692)
  • fix(web-components): load tailwind.css so wink: classes and daisyUI tokens compile (#1577)
  • fix(web-components): scope Sentry capture to our own script’s origin (#1604)
  • fix(web-components): show price on map markers instead of a static icon (#1575)
  • fix(workbench): add specialRateSaved$ to mockSpecialRateFacade (#1583)
  • refactor(shared): extract shared timeframe dropdown component (#1599)
  • refactor(travel-inventory): extract shared photos-section descriptor (#1593) (#1597)
  • refactor(workbench): share travel-inventory facade stubs across 8 domains (#1596)
  • test(admin): perk journey, plus fix for the crushed perk form layout (#1690)
  • test(book): add a read-only journey from search to checkout (#1695)
  • test(e2e): stop reporting superseded and third-party cancellations as failures (#1687)
  • test(e2e): stop the gate passing through outages: settle the network, never cache e2e (#1691)
  • test(jest): add a ratchet so vacuous specs can only shrink (#1693)
  • test(portal): cancellation policy journey, plus fixes for a raw i18n key and a lint false positive (#1689)
  • test(portal): webhook journey, plus fix for the list not loading on reload (#1688)
  • test(travel-inventory): extract shared photos-requirement test helper (#1598)
  • test(workbench): add storybook sweep that renders every story as a ci gate (#1686)