@wix/himalaya-cli 0.1035.0 → 0.1037.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/_types/core/dev-server/src/builder.d.ts +7 -1
- package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/_types/stdlib/wix-sdk/events/src/display.d.ts +13 -1
- package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/_types/stdlib/wix-sdk/portfolio/src/index.d.ts +46 -9
- package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/wix-events.mjs +28 -6
- package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/wix-portfolio.mjs +14 -2
- package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/wix-stores-collections.mjs +1 -1
- package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/wix-stores.mjs +7 -1
- package/dist/cli.mjs +482 -113
- package/dist/preview-assets.generated.bin +0 -0
- package/fixtures/wix-canned.json +51 -2
- package/guides/sdk-reference.json +32 -14
- package/guides/wix-business-context.md +13 -1
- package/guides/wix-site-to-himi-app.md +10 -1
- package/package.json +2 -2
- package/templates/beauty-salon/dev/index.ts +72 -175
- package/templates/beauty-salon/tier5-src/_shared/collection-contract.ts +16 -9
- package/templates/beauty-salon/tier5-src/_shared/collection-service.ts +19 -5
- package/templates/beauty-salon/tier5-src/_shared/engine-intl.ts +51 -0
- package/templates/beauty-salon/tier5-src/_shared/himi-restaurants.ts +4 -4
- package/templates/beauty-salon/tier5-src/_shared/owner-load-error.ts +49 -0
- package/templates/beauty-salon/tier5-src/_shared/wix-service-price.ts +1 -1
- package/templates/beauty-salon/tier5-src/himi-booking-bookings/index.ts +14 -8
- package/templates/beauty-salon/tier5-src/himi-branded-lite-home/index.ts +12 -1
- package/templates/beauty-salon/tier5-src/himi-branded-lite-info/index.ts +5 -2
- package/templates/beauty-salon/tier5-src/himi-branded-lite-plans/index.ts +1 -1
- package/templates/beauty-salon/tier5-src/wix-spaces-collections/index.ts +1 -1
- package/templates/beauty-salon/tier5-src/wix-spaces-whats-new/index.ts +4 -4
- package/templates/beauty-salon-owner/dev/index.ts +84 -599
- package/templates/beauty-salon-owner/tier5-src/_shared/aria-chat.ts +22 -6
- package/templates/beauty-salon-owner/tier5-src/_shared/collection-contract.ts +16 -9
- package/templates/beauty-salon-owner/tier5-src/_shared/collection-service.ts +19 -5
- package/templates/beauty-salon-owner/tier5-src/_shared/engine-intl.ts +51 -0
- package/templates/beauty-salon-owner/tier5-src/_shared/owner-load-error.ts +49 -0
- package/templates/beauty-salon-owner/tier5-src/_shared/owner-module-data.ts +2 -2
- package/templates/beauty-salon-owner/tier5-src/himi-owner-lite-appointments/index.ts +4 -1
- package/templates/branded-lite/dev/index.ts +178 -264
- package/templates/branded-lite/tier5-src/_shared/collection-contract.ts +16 -9
- package/templates/branded-lite/tier5-src/_shared/collection-service.ts +19 -5
- package/templates/branded-lite/tier5-src/_shared/engine-intl.ts +51 -0
- package/templates/branded-lite/tier5-src/_shared/himi-restaurants.ts +4 -4
- package/templates/branded-lite/tier5-src/_shared/owner-load-error.ts +49 -0
- package/templates/branded-lite/tier5-src/_shared/wix-service-price.ts +1 -1
- package/templates/branded-lite/tier5-src/himi-booking-bookings/index.ts +14 -8
- package/templates/branded-lite/tier5-src/himi-branded-lite-cms/index.ts +5 -5
- package/templates/branded-lite/tier5-src/himi-branded-lite-coupons/index.ts +33 -7
- package/templates/branded-lite/tier5-src/himi-branded-lite-donations/index.ts +3 -3
- package/templates/branded-lite/tier5-src/himi-branded-lite-forms/index.ts +11 -10
- package/templates/branded-lite/tier5-src/himi-branded-lite-giftcards/index.ts +3 -3
- package/templates/branded-lite/tier5-src/himi-branded-lite-home/index.ts +12 -1
- package/templates/branded-lite/tier5-src/himi-branded-lite-info/index.ts +5 -2
- package/templates/branded-lite/tier5-src/himi-branded-lite-invoices/index.ts +3 -3
- package/templates/branded-lite/tier5-src/himi-branded-lite-loyalty/index.ts +1 -1
- package/templates/branded-lite/tier5-src/himi-branded-lite-plans/index.ts +1 -1
- package/templates/branded-lite/tier5-src/himi-branded-lite-portfolio/index.ts +2 -2
- package/templates/branded-lite/tier5-src/himi-branded-lite-portfolio-project/index.ts +3 -3
- package/templates/branded-lite/tier5-src/himi-branded-lite-program/index.ts +1 -1
- package/templates/branded-lite/tier5-src/himi-branded-lite-reserve/index.ts +5 -3
- package/templates/branded-lite/tier5-src/himi-events-detail/index.ts +1 -1
- package/templates/branded-lite/tier5-src/himi-events-list/index.ts +20 -4
- package/templates/branded-lite/tier5-src/himi-events-my-events/index.ts +2 -2
- package/templates/branded-lite/tier5-src/wix-spaces-collections/index.ts +1 -1
- package/templates/branded-lite/tier5-src/wix-spaces-forum/index.ts +7 -1
- package/templates/branded-lite/tier5-src/wix-spaces-whats-new/index.ts +4 -4
- package/templates/community-club/dev/index.ts +62 -81
- package/templates/community-club/tier5-src/_shared/collection-contract.ts +16 -9
- package/templates/community-club/tier5-src/_shared/collection-service.ts +19 -5
- package/templates/community-club/tier5-src/_shared/engine-intl.ts +51 -0
- package/templates/community-club/tier5-src/_shared/himi-restaurants.ts +4 -4
- package/templates/community-club/tier5-src/_shared/owner-load-error.ts +49 -0
- package/templates/community-club/tier5-src/_shared/wix-service-price.ts +1 -1
- package/templates/community-club/tier5-src/himi-branded-lite-cms/index.ts +5 -5
- package/templates/community-club/tier5-src/himi-branded-lite-home/index.ts +12 -1
- package/templates/community-club/tier5-src/himi-branded-lite-info/index.ts +5 -2
- package/templates/community-club/tier5-src/himi-events-detail/index.ts +1 -1
- package/templates/community-club/tier5-src/himi-events-list/index.ts +20 -4
- package/templates/community-club/tier5-src/himi-events-my-events/index.ts +2 -2
- package/templates/community-club/tier5-src/wix-spaces-whats-new/index.ts +4 -4
- package/templates/community-club-owner/dev/index.ts +84 -599
- package/templates/community-club-owner/tier5-src/_shared/aria-chat.ts +22 -6
- package/templates/community-club-owner/tier5-src/_shared/collection-contract.ts +16 -9
- package/templates/community-club-owner/tier5-src/_shared/collection-service.ts +19 -5
- package/templates/community-club-owner/tier5-src/_shared/engine-intl.ts +51 -0
- package/templates/community-club-owner/tier5-src/_shared/owner-load-error.ts +49 -0
- package/templates/community-club-owner/tier5-src/_shared/owner-module-data.ts +2 -2
- package/templates/community-club-owner/tier5-src/himi-owner-lite-events/index.ts +1 -0
- package/templates/events-meetups/dev/index.ts +60 -79
- package/templates/events-meetups/tier5-src/_shared/collection-contract.ts +16 -9
- package/templates/events-meetups/tier5-src/_shared/collection-service.ts +19 -5
- package/templates/events-meetups/tier5-src/_shared/engine-intl.ts +51 -0
- package/templates/events-meetups/tier5-src/_shared/himi-restaurants.ts +4 -4
- package/templates/events-meetups/tier5-src/_shared/owner-load-error.ts +49 -0
- package/templates/events-meetups/tier5-src/_shared/wix-service-price.ts +1 -1
- package/templates/events-meetups/tier5-src/himi-branded-lite-home/index.ts +12 -1
- package/templates/events-meetups/tier5-src/himi-branded-lite-info/index.ts +5 -2
- package/templates/events-meetups/tier5-src/himi-events-detail/index.ts +1 -1
- package/templates/events-meetups/tier5-src/himi-events-list/index.ts +20 -4
- package/templates/events-meetups/tier5-src/himi-events-my-events/index.ts +2 -2
- package/templates/events-meetups/tier5-src/wix-spaces-whats-new/index.ts +4 -4
- package/templates/events-meetups-owner/dev/index.ts +84 -543
- package/templates/events-meetups-owner/tier5-src/_shared/aria-chat.ts +22 -6
- package/templates/events-meetups-owner/tier5-src/_shared/collection-contract.ts +16 -9
- package/templates/events-meetups-owner/tier5-src/_shared/collection-service.ts +19 -5
- package/templates/events-meetups-owner/tier5-src/_shared/engine-intl.ts +51 -0
- package/templates/events-meetups-owner/tier5-src/_shared/owner-load-error.ts +49 -0
- package/templates/events-meetups-owner/tier5-src/_shared/owner-module-data.ts +2 -2
- package/templates/events-meetups-owner/tier5-src/himi-owner-lite-events/index.ts +1 -0
- package/templates/gym-fitness/dev/index.ts +73 -204
- package/templates/gym-fitness/tier5-src/_shared/collection-contract.ts +16 -9
- package/templates/gym-fitness/tier5-src/_shared/collection-service.ts +19 -5
- package/templates/gym-fitness/tier5-src/_shared/engine-intl.ts +51 -0
- package/templates/gym-fitness/tier5-src/_shared/himi-restaurants.ts +4 -4
- package/templates/gym-fitness/tier5-src/_shared/owner-load-error.ts +49 -0
- package/templates/gym-fitness/tier5-src/_shared/wix-service-price.ts +1 -1
- package/templates/gym-fitness/tier5-src/himi-booking-bookings/index.ts +14 -8
- package/templates/gym-fitness/tier5-src/himi-branded-lite-home/index.ts +12 -1
- package/templates/gym-fitness/tier5-src/himi-branded-lite-info/index.ts +5 -2
- package/templates/gym-fitness/tier5-src/himi-branded-lite-plans/index.ts +1 -1
- package/templates/gym-fitness/tier5-src/himi-events-detail/index.ts +1 -1
- package/templates/gym-fitness/tier5-src/himi-events-list/index.ts +20 -4
- package/templates/gym-fitness/tier5-src/himi-events-my-events/index.ts +2 -2
- package/templates/gym-fitness/tier5-src/wix-spaces-collections/index.ts +1 -1
- package/templates/gym-fitness/tier5-src/wix-spaces-whats-new/index.ts +4 -4
- package/templates/gym-fitness-owner/dev/index.ts +84 -627
- package/templates/gym-fitness-owner/tier5-src/_shared/aria-chat.ts +22 -6
- package/templates/gym-fitness-owner/tier5-src/_shared/collection-contract.ts +16 -9
- package/templates/gym-fitness-owner/tier5-src/_shared/collection-service.ts +19 -5
- package/templates/gym-fitness-owner/tier5-src/_shared/engine-intl.ts +51 -0
- package/templates/gym-fitness-owner/tier5-src/_shared/owner-load-error.ts +49 -0
- package/templates/gym-fitness-owner/tier5-src/_shared/owner-module-data.ts +2 -2
- package/templates/gym-fitness-owner/tier5-src/himi-owner-lite-appointments/index.ts +4 -1
- package/templates/gym-fitness-owner/tier5-src/himi-owner-lite-events/index.ts +1 -0
- package/templates/himi-chat/tier5-src/_shared/owner-load-error.ts +49 -0
- package/templates/nonprofit-cause/dev/index.ts +71 -90
- package/templates/nonprofit-cause/tier5-src/_shared/collection-contract.ts +16 -9
- package/templates/nonprofit-cause/tier5-src/_shared/collection-service.ts +19 -5
- package/templates/nonprofit-cause/tier5-src/_shared/engine-intl.ts +51 -0
- package/templates/nonprofit-cause/tier5-src/_shared/himi-restaurants.ts +4 -4
- package/templates/nonprofit-cause/tier5-src/_shared/owner-load-error.ts +49 -0
- package/templates/nonprofit-cause/tier5-src/_shared/wix-service-price.ts +1 -1
- package/templates/nonprofit-cause/tier5-src/himi-branded-lite-home/index.ts +12 -1
- package/templates/nonprofit-cause/tier5-src/himi-branded-lite-info/index.ts +5 -2
- package/templates/nonprofit-cause/tier5-src/himi-branded-lite-plans/index.ts +1 -1
- package/templates/nonprofit-cause/tier5-src/himi-events-detail/index.ts +1 -1
- package/templates/nonprofit-cause/tier5-src/himi-events-list/index.ts +20 -4
- package/templates/nonprofit-cause/tier5-src/himi-events-my-events/index.ts +2 -2
- package/templates/nonprofit-cause/tier5-src/wix-spaces-whats-new/index.ts +4 -4
- package/templates/nonprofit-cause-owner/dev/index.ts +84 -571
- package/templates/nonprofit-cause-owner/tier5-src/_shared/aria-chat.ts +22 -6
- package/templates/nonprofit-cause-owner/tier5-src/_shared/collection-contract.ts +16 -9
- package/templates/nonprofit-cause-owner/tier5-src/_shared/collection-service.ts +19 -5
- package/templates/nonprofit-cause-owner/tier5-src/_shared/engine-intl.ts +51 -0
- package/templates/nonprofit-cause-owner/tier5-src/_shared/owner-load-error.ts +49 -0
- package/templates/nonprofit-cause-owner/tier5-src/_shared/owner-module-data.ts +2 -2
- package/templates/nonprofit-cause-owner/tier5-src/himi-owner-lite-appointments/index.ts +4 -1
- package/templates/nonprofit-cause-owner/tier5-src/himi-owner-lite-events/index.ts +1 -0
- package/templates/owner-lite/dev/index.ts +84 -627
- package/templates/owner-lite/tier5-src/_shared/aria-chat.ts +22 -6
- package/templates/owner-lite/tier5-src/_shared/collection-contract.ts +16 -9
- package/templates/owner-lite/tier5-src/_shared/collection-service.ts +19 -5
- package/templates/owner-lite/tier5-src/_shared/engine-intl.ts +51 -0
- package/templates/owner-lite/tier5-src/_shared/owner-load-error.ts +49 -0
- package/templates/owner-lite/tier5-src/_shared/owner-module-data.ts +2 -2
- package/templates/owner-lite/tier5-src/himi-owner-lite-appointments/index.ts +4 -1
- package/templates/owner-lite/tier5-src/himi-owner-lite-events/index.ts +1 -0
- package/templates/podcast-creator/dev/index.ts +71 -90
- package/templates/podcast-creator/tier5-src/_shared/collection-contract.ts +16 -9
- package/templates/podcast-creator/tier5-src/_shared/collection-service.ts +19 -5
- package/templates/podcast-creator/tier5-src/_shared/engine-intl.ts +51 -0
- package/templates/podcast-creator/tier5-src/_shared/himi-restaurants.ts +4 -4
- package/templates/podcast-creator/tier5-src/_shared/owner-load-error.ts +49 -0
- package/templates/podcast-creator/tier5-src/_shared/wix-service-price.ts +1 -1
- package/templates/podcast-creator/tier5-src/himi-branded-lite-home/index.ts +12 -1
- package/templates/podcast-creator/tier5-src/himi-branded-lite-info/index.ts +5 -2
- package/templates/podcast-creator/tier5-src/himi-branded-lite-plans/index.ts +1 -1
- package/templates/podcast-creator/tier5-src/himi-events-detail/index.ts +1 -1
- package/templates/podcast-creator/tier5-src/himi-events-list/index.ts +20 -4
- package/templates/podcast-creator/tier5-src/himi-events-my-events/index.ts +2 -2
- package/templates/podcast-creator/tier5-src/wix-spaces-whats-new/index.ts +4 -4
- package/templates/podcast-creator-owner/dev/index.ts +84 -599
- package/templates/podcast-creator-owner/tier5-src/_shared/aria-chat.ts +22 -6
- package/templates/podcast-creator-owner/tier5-src/_shared/collection-contract.ts +16 -9
- package/templates/podcast-creator-owner/tier5-src/_shared/collection-service.ts +19 -5
- package/templates/podcast-creator-owner/tier5-src/_shared/engine-intl.ts +51 -0
- package/templates/podcast-creator-owner/tier5-src/_shared/owner-load-error.ts +49 -0
- package/templates/podcast-creator-owner/tier5-src/_shared/owner-module-data.ts +2 -2
- package/templates/podcast-creator-owner/tier5-src/himi-owner-lite-events/index.ts +1 -0
- package/templates/portfolio-creative/dev/index.ts +62 -137
- package/templates/portfolio-creative/tier5-src/_shared/collection-contract.ts +16 -9
- package/templates/portfolio-creative/tier5-src/_shared/collection-service.ts +19 -5
- package/templates/portfolio-creative/tier5-src/_shared/engine-intl.ts +51 -0
- package/templates/portfolio-creative/tier5-src/_shared/himi-restaurants.ts +4 -4
- package/templates/portfolio-creative/tier5-src/_shared/owner-load-error.ts +49 -0
- package/templates/portfolio-creative/tier5-src/_shared/wix-service-price.ts +1 -1
- package/templates/portfolio-creative/tier5-src/himi-branded-lite-home/index.ts +12 -1
- package/templates/portfolio-creative/tier5-src/himi-branded-lite-info/index.ts +5 -2
- package/templates/portfolio-creative/tier5-src/himi-branded-lite-portfolio/index.ts +2 -2
- package/templates/portfolio-creative/tier5-src/himi-branded-lite-portfolio-project/index.ts +3 -3
- package/templates/portfolio-creative/tier5-src/himi-events-detail/index.ts +1 -1
- package/templates/portfolio-creative/tier5-src/himi-events-list/index.ts +20 -4
- package/templates/portfolio-creative/tier5-src/himi-events-my-events/index.ts +2 -2
- package/templates/portfolio-creative/tier5-src/wix-spaces-collections/index.ts +1 -1
- package/templates/portfolio-creative/tier5-src/wix-spaces-whats-new/index.ts +4 -4
- package/templates/portfolio-creative-owner/dev/index.ts +84 -599
- package/templates/portfolio-creative-owner/tier5-src/_shared/aria-chat.ts +22 -6
- package/templates/portfolio-creative-owner/tier5-src/_shared/collection-contract.ts +16 -9
- package/templates/portfolio-creative-owner/tier5-src/_shared/collection-service.ts +19 -5
- package/templates/portfolio-creative-owner/tier5-src/_shared/engine-intl.ts +51 -0
- package/templates/portfolio-creative-owner/tier5-src/_shared/owner-load-error.ts +49 -0
- package/templates/portfolio-creative-owner/tier5-src/_shared/owner-module-data.ts +2 -2
- package/templates/portfolio-creative-owner/tier5-src/himi-owner-lite-appointments/index.ts +4 -1
- package/templates/restaurant/dev/index.ts +124 -101
- package/templates/restaurant/tier5-src/_shared/collection-contract.ts +16 -9
- package/templates/restaurant/tier5-src/_shared/collection-service.ts +19 -5
- package/templates/restaurant/tier5-src/_shared/engine-intl.ts +51 -0
- package/templates/restaurant/tier5-src/_shared/himi-restaurants.ts +4 -4
- package/templates/restaurant/tier5-src/_shared/owner-load-error.ts +49 -0
- package/templates/restaurant/tier5-src/_shared/wix-service-price.ts +1 -1
- package/templates/restaurant/tier5-src/himi-branded-lite-home/index.ts +12 -1
- package/templates/restaurant/tier5-src/himi-branded-lite-info/index.ts +5 -2
- package/templates/restaurant/tier5-src/himi-branded-lite-reserve/index.ts +5 -3
- package/templates/restaurant/tier5-src/himi-events-detail/index.ts +1 -1
- package/templates/restaurant/tier5-src/himi-events-list/index.ts +20 -4
- package/templates/restaurant/tier5-src/himi-events-my-events/index.ts +2 -2
- package/templates/restaurant/tier5-src/wix-spaces-whats-new/index.ts +4 -4
- package/templates/restaurant-owner/dev/index.ts +84 -627
- package/templates/restaurant-owner/tier5-src/_shared/aria-chat.ts +22 -6
- package/templates/restaurant-owner/tier5-src/_shared/collection-contract.ts +16 -9
- package/templates/restaurant-owner/tier5-src/_shared/collection-service.ts +19 -5
- package/templates/restaurant-owner/tier5-src/_shared/engine-intl.ts +51 -0
- package/templates/restaurant-owner/tier5-src/_shared/owner-load-error.ts +49 -0
- package/templates/restaurant-owner/tier5-src/_shared/owner-module-data.ts +2 -2
- package/templates/restaurant-owner/tier5-src/himi-owner-lite-appointments/index.ts +4 -1
- package/templates/restaurant-owner/tier5-src/himi-owner-lite-events/index.ts +1 -0
- package/templates/retail-store/dev/index.ts +59 -106
- package/templates/retail-store/tier5-src/_shared/collection-contract.ts +16 -9
- package/templates/retail-store/tier5-src/_shared/collection-service.ts +19 -5
- package/templates/retail-store/tier5-src/_shared/engine-intl.ts +51 -0
- package/templates/retail-store/tier5-src/_shared/himi-restaurants.ts +4 -4
- package/templates/retail-store/tier5-src/_shared/owner-load-error.ts +49 -0
- package/templates/retail-store/tier5-src/_shared/wix-service-price.ts +1 -1
- package/templates/retail-store/tier5-src/himi-branded-lite-home/index.ts +12 -1
- package/templates/retail-store/tier5-src/himi-branded-lite-info/index.ts +5 -2
- package/templates/retail-store/tier5-src/wix-spaces-collections/index.ts +1 -1
- package/templates/retail-store/tier5-src/wix-spaces-whats-new/index.ts +4 -4
- package/templates/retail-store-owner/dev/index.ts +84 -571
- package/templates/retail-store-owner/tier5-src/_shared/aria-chat.ts +22 -6
- package/templates/retail-store-owner/tier5-src/_shared/collection-contract.ts +16 -9
- package/templates/retail-store-owner/tier5-src/_shared/collection-service.ts +19 -5
- package/templates/retail-store-owner/tier5-src/_shared/engine-intl.ts +51 -0
- package/templates/retail-store-owner/tier5-src/_shared/owner-load-error.ts +49 -0
- package/templates/retail-store-owner/tier5-src/_shared/owner-module-data.ts +2 -2
- package/templates/yoga-studio/dev/index.ts +73 -148
- package/templates/yoga-studio/tier5-src/_shared/collection-contract.ts +16 -9
- package/templates/yoga-studio/tier5-src/_shared/collection-service.ts +19 -5
- package/templates/yoga-studio/tier5-src/_shared/engine-intl.ts +51 -0
- package/templates/yoga-studio/tier5-src/_shared/himi-restaurants.ts +4 -4
- package/templates/yoga-studio/tier5-src/_shared/owner-load-error.ts +49 -0
- package/templates/yoga-studio/tier5-src/_shared/wix-service-price.ts +1 -1
- package/templates/yoga-studio/tier5-src/himi-booking-bookings/index.ts +14 -8
- package/templates/yoga-studio/tier5-src/himi-branded-lite-home/index.ts +12 -1
- package/templates/yoga-studio/tier5-src/himi-branded-lite-info/index.ts +5 -2
- package/templates/yoga-studio/tier5-src/himi-branded-lite-plans/index.ts +1 -1
- package/templates/yoga-studio/tier5-src/himi-branded-lite-program/index.ts +1 -1
- package/templates/yoga-studio/tier5-src/himi-events-detail/index.ts +1 -1
- package/templates/yoga-studio/tier5-src/himi-events-list/index.ts +20 -4
- package/templates/yoga-studio/tier5-src/himi-events-my-events/index.ts +2 -2
- package/templates/yoga-studio/tier5-src/wix-spaces-whats-new/index.ts +4 -4
- package/templates/yoga-studio-owner/dev/index.ts +84 -571
- package/templates/yoga-studio-owner/tier5-src/_shared/aria-chat.ts +22 -6
- package/templates/yoga-studio-owner/tier5-src/_shared/collection-contract.ts +16 -9
- package/templates/yoga-studio-owner/tier5-src/_shared/collection-service.ts +19 -5
- package/templates/yoga-studio-owner/tier5-src/_shared/engine-intl.ts +51 -0
- package/templates/yoga-studio-owner/tier5-src/_shared/owner-load-error.ts +49 -0
- package/templates/yoga-studio-owner/tier5-src/_shared/owner-module-data.ts +2 -2
- package/templates/yoga-studio-owner/tier5-src/himi-owner-lite-appointments/index.ts +4 -1
- package/templates/yoga-studio-owner/tier5-src/himi-owner-lite-events/index.ts +1 -0
|
@@ -11,7 +11,7 @@ import { wixMediaUrl, type WixImageSize } from "@himalaya/wix-media";
|
|
|
11
11
|
// copier recognizes + carries the dependency; resolves to the same file here
|
|
12
12
|
// and in the scaffolded tier5-src/_shared/ layout.
|
|
13
13
|
import { cleanTitle, initials } from "../_shared/himi-text.js";
|
|
14
|
-
import { formatCurrency } from "../_shared/engine-intl.js";
|
|
14
|
+
import { formatCurrency, normalizeFormattedPrice } from "../_shared/engine-intl.js";
|
|
15
15
|
|
|
16
16
|
/** One dish tile/row: the media-XOR-initials card contract every himi list
|
|
17
17
|
* uses, plus a formatted price line and the templated detail screen id. */
|
|
@@ -97,13 +97,13 @@ export function itemPriceLine(item: WixItem): string {
|
|
|
97
97
|
| { price?: unknown; currency?: unknown; formattedPrice?: unknown }
|
|
98
98
|
| undefined;
|
|
99
99
|
const formatted = typeof info?.formattedPrice === "string" ? info.formattedPrice.trim() : "";
|
|
100
|
-
if (formatted) return formatted;
|
|
100
|
+
if (formatted) return normalizeFormattedPrice(formatted);
|
|
101
101
|
const price = info?.price;
|
|
102
102
|
if (price == null || price === "" || Number.isNaN(Number(price))) return "";
|
|
103
103
|
const currency = typeof info?.currency === "string" ? info.currency : "";
|
|
104
104
|
if (!currency) return `${price}`;
|
|
105
105
|
try {
|
|
106
|
-
return formatCurrency(Number(price), currency, "en"
|
|
106
|
+
return formatCurrency(Number(price), currency, "en");
|
|
107
107
|
} catch {
|
|
108
108
|
return `${price}`;
|
|
109
109
|
}
|
|
@@ -149,7 +149,7 @@ export function itemPriceVariants(item: WixItem): Array<{ id: string; name: stri
|
|
|
149
149
|
let priceLine = `${price}`;
|
|
150
150
|
if (currency) {
|
|
151
151
|
try {
|
|
152
|
-
priceLine = formatCurrency(Number(price), currency, "en"
|
|
152
|
+
priceLine = formatCurrency(Number(price), currency, "en");
|
|
153
153
|
} catch { /* keep the bare amount */ }
|
|
154
154
|
}
|
|
155
155
|
rows.push({ id: typeof node.id === "string" && node.id ? node.id : `variant-${index}`, name: name || "Option", priceLine });
|
|
@@ -74,6 +74,54 @@ const SITE_CONTEXT_CODES = ["MISSING_METASITE_ID", "MISSING_REQUEST_SITE_CONTEXT
|
|
|
74
74
|
* message and starts being a payload dump. */
|
|
75
75
|
const MAX_RAW = 200;
|
|
76
76
|
|
|
77
|
+
/**
|
|
78
|
+
* A TRANSPORT failure: the request never got an HTTP answer at all.
|
|
79
|
+
*
|
|
80
|
+
* Each host describes one in its own platform's words, and every one of them is a
|
|
81
|
+
* diagnostic dump rather than a message. iOS's JSWorker hands a worker the Swift
|
|
82
|
+
* description of the `NSError` —
|
|
83
|
+
* `Error Domain=NSURLErrorDomain Code=-1004 "Could not connect to the server."
|
|
84
|
+
* UserInfo={… NSErrorFailingURLStringKey=http://127.0.0.1:8178/__dev/wix/proxy, …}`
|
|
85
|
+
* — which Aria painted verbatim: the domain, the code, and the local server's
|
|
86
|
+
* own URL. Android's bridge carries the `java.net` exception text, and a browser's
|
|
87
|
+
* fetch rejects with "Failed to fetch" / "Load failed" / "NetworkError …".
|
|
88
|
+
*
|
|
89
|
+
* Only a message with NO HTTP status qualifies: a status means Wix answered, and
|
|
90
|
+
* that case keeps its own reductions below.
|
|
91
|
+
*/
|
|
92
|
+
const TRANSPORT = [
|
|
93
|
+
/\bError Domain=\w+/, // any Cocoa NSError description
|
|
94
|
+
/\bNSURLErrorDomain\b/,
|
|
95
|
+
/\bjava\.(?:net|io)\.\w+(?:Exception|Error)\b/,
|
|
96
|
+
/\b(?:UnknownHost|Connect|SocketTimeout|NoRouteToHost|SSLHandshake)Exception\b/,
|
|
97
|
+
// Android's WebViewJSWorker bridges `e.message ?: e.javaClass.simpleName`, so
|
|
98
|
+
// the class name is usually absent and only OkHttp's own message arrives.
|
|
99
|
+
/^Failed to connect to \S/,
|
|
100
|
+
/^Unable to resolve host\b/,
|
|
101
|
+
/\b(?:Connection refused|Network is unreachable|Software caused connection abort)\b/,
|
|
102
|
+
/^(?:timeout|Read timed out|connect timed out)$/i,
|
|
103
|
+
/\bFailed to fetch\b/,
|
|
104
|
+
/\bNetworkError when attempting to fetch\b/,
|
|
105
|
+
/^(?:TypeError: )?Load failed$/,
|
|
106
|
+
/\bnet::ERR_[A-Z_]+/,
|
|
107
|
+
];
|
|
108
|
+
|
|
109
|
+
/** Did this failure happen below HTTP — no answer from Wix at all? */
|
|
110
|
+
export function isTransportFailure(e: unknown): boolean {
|
|
111
|
+
const msg = String((e as Error)?.message ?? e ?? "");
|
|
112
|
+
if (STATUS.test(msg)) return false;
|
|
113
|
+
return TRANSPORT.some((re) => re.test(msg));
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
/** The one sentence for a transport failure. Copy-as-configuration: the key is
|
|
117
|
+
* under `ownerCommon.`, which every owner screen (Aria included) forwards. */
|
|
118
|
+
export function ownerTransportFailureText(): string {
|
|
119
|
+
return copyParam(
|
|
120
|
+
"ownerCommon.networkUnreachable",
|
|
121
|
+
"Couldn’t reach Wix. Check your connection and try again.",
|
|
122
|
+
);
|
|
123
|
+
}
|
|
124
|
+
|
|
77
125
|
/**
|
|
78
126
|
* Reduce a wire failure to something a PERSON can read.
|
|
79
127
|
*
|
|
@@ -85,6 +133,7 @@ const MAX_RAW = 200;
|
|
|
85
133
|
* markup; a long non-HTML body is truncated for the same reason.
|
|
86
134
|
*/
|
|
87
135
|
function humanWireError(msg: string): string {
|
|
136
|
+
if (isTransportFailure(msg)) return ownerTransportFailureText();
|
|
88
137
|
const status = STATUS.exec(msg)?.[1];
|
|
89
138
|
// A JSON ENVELOPE or a NAMED REASON CODE is the machine's word for it, and the
|
|
90
139
|
// owner gets neither. Both reductions used to live in `ownerDisplayError` only,
|
|
@@ -119,7 +119,7 @@ export function formatServicePrice(service: unknown): string {
|
|
|
119
119
|
if (amount == null) return "";
|
|
120
120
|
const currency = serviceCurrency(service);
|
|
121
121
|
try {
|
|
122
|
-
return formatCurrency(amount, currency, "en"
|
|
122
|
+
return formatCurrency(amount, currency, "en");
|
|
123
123
|
} catch {
|
|
124
124
|
return `${amount}`;
|
|
125
125
|
}
|
|
@@ -38,14 +38,14 @@ interface State {
|
|
|
38
38
|
|
|
39
39
|
function row(collection: CmsCollectionDefinition): CollectionRow {
|
|
40
40
|
const title = collection.displayName.trim() || collection.id;
|
|
41
|
-
|
|
41
|
+
// No field count and no "Available to visitors": both are back-office schema/permission
|
|
42
|
+
// metadata, meaningless to the visitor reading the card ([branded-lite-qa] #3077). "Members
|
|
43
|
+
// only" stays — it tells the visitor they will need to sign in, which is theirs to know.
|
|
42
44
|
return {
|
|
43
45
|
id: collection.id,
|
|
44
46
|
title,
|
|
45
|
-
subtitle:
|
|
46
|
-
meta: collection.readRole === "ANYONE"
|
|
47
|
-
? copyParam("cms.visitorAccessLabel", "Available to visitors")
|
|
48
|
-
: copyParam("cms.membersOnlyAccessLabel", "Members only"),
|
|
47
|
+
subtitle: "",
|
|
48
|
+
meta: collection.readRole === "ANYONE" ? "" : copyParam("cms.membersOnlyAccessLabel", "Members only"),
|
|
49
49
|
initial: (title[0] || "C").toUpperCase(),
|
|
50
50
|
detailScreenId: `himi_cms_collection_${encodeURIComponent(collection.id)}`,
|
|
51
51
|
};
|
|
@@ -388,6 +388,10 @@ function resolveEffectiveLayout(arg: unknown, productCount: number): LayoutId {
|
|
|
388
388
|
});
|
|
389
389
|
}
|
|
390
390
|
|
|
391
|
+
/** The time-of-day greeting. Read at REFRESH time only, never at boot: the release build hashes
|
|
392
|
+
* the initial state, so a greeting read off the build machine's clock made every build of an
|
|
393
|
+
* unchanged template a different release (#3268, the `nondeterministic-initial-state` lint).
|
|
394
|
+
* The initial state carries `neutralWelcome()` instead, and the first refresh swaps this in. */
|
|
391
395
|
function welcome(): string {
|
|
392
396
|
const hour = new Date().getHours();
|
|
393
397
|
if (hour < 12) return copyParam("home.greetingMorning", "Good morning");
|
|
@@ -395,6 +399,11 @@ function welcome(): string {
|
|
|
395
399
|
return copyParam("home.greetingEvening", "Good evening");
|
|
396
400
|
}
|
|
397
401
|
|
|
402
|
+
/** The boot-time greeting: clock-free, so the baked initial state is the same on every build. */
|
|
403
|
+
function neutralWelcome(): string {
|
|
404
|
+
return copyParam("home.greetingNeutral", "Welcome");
|
|
405
|
+
}
|
|
406
|
+
|
|
398
407
|
function feature(p: StoreProduct): ProductFeature {
|
|
399
408
|
const name = cleanTitle(p.name) || copyParam("home.productFallbackName", "Featured item");
|
|
400
409
|
const image = productImage(p);
|
|
@@ -871,7 +880,9 @@ function baseState(): State {
|
|
|
871
880
|
hideHeroInitial: true,
|
|
872
881
|
hideHeroFallback: true,
|
|
873
882
|
hideFeaturedSkeleton: false,
|
|
874
|
-
|
|
883
|
+
// Not welcome(): that reads the clock, and this state is baked into the release. A neutral
|
|
884
|
+
// greeting keeps the hero pill painted (same size, no reflow) until the first refresh.
|
|
885
|
+
welcome: neutralWelcome(),
|
|
875
886
|
refreshedAt: "",
|
|
876
887
|
effectiveLayout: resolveEffectiveLayout(undefined, 0),
|
|
877
888
|
accentColor: resolveAccent(undefined),
|
|
@@ -112,7 +112,10 @@ const svc = defineService<State, {
|
|
|
112
112
|
// Probe before revealing anything picker-shaped (spec R8) — on a customer build this
|
|
113
113
|
// stays false and the whole subtree is hidden.
|
|
114
114
|
const canPick = await pickerAvailable();
|
|
115
|
-
|
|
115
|
+
// The runtime line names the internal platform ("HimalayaCore 0.0.1") — a number for
|
|
116
|
+
// whoever debugs the build, not for a white-label app's customer ([branded-lite-qa]
|
|
117
|
+
// #3002/#3083). It shows only on a build that opted into the QA picker.
|
|
118
|
+
next = { ...next, pickerAvailable: canPick, pickerHidden: !canPick, runtimeLine: canPick ? next.runtimeLine : "" };
|
|
116
119
|
if (canPick) {
|
|
117
120
|
// `active()` is more precise than app-info's releasePinned: it also says WHICH pin
|
|
118
121
|
// (user vs baked) is holding the release.
|
|
@@ -122,7 +125,7 @@ const svc = defineService<State, {
|
|
|
122
125
|
}
|
|
123
126
|
}
|
|
124
127
|
} catch {
|
|
125
|
-
next = { ...next, pickerAvailable: false, pickerHidden: true };
|
|
128
|
+
next = { ...next, pickerAvailable: false, pickerHidden: true, runtimeLine: "" };
|
|
126
129
|
}
|
|
127
130
|
return next;
|
|
128
131
|
},
|
|
@@ -162,7 +162,7 @@ function tierPrice(t: WixAvailableTicket): string {
|
|
|
162
162
|
// as "25" — a price that reads as a quantity, and nothing downstream could tell it was a
|
|
163
163
|
// formatting failure. `formatCurrency` uses real Intl where it exists and a symbol-carrying
|
|
164
164
|
// fallback where it does not, diffed against ECMA-402 in engine-intl-fallback.test.ts.
|
|
165
|
-
return formatCurrency(Number(raw), t.price?.currency || "USD", "en"
|
|
165
|
+
return formatCurrency(Number(raw), t.price?.currency || "USD", "en");
|
|
166
166
|
}
|
|
167
167
|
|
|
168
168
|
function tierAvailable(t: WixAvailableTicket): boolean {
|
|
@@ -35,16 +35,32 @@ const svc = defineBackendCollection<S, EventRow>("himiEvents", {
|
|
|
35
35
|
id: row => row.id,
|
|
36
36
|
errorMessage: () => copyParam("events.errorText", "Events could not be loaded."),
|
|
37
37
|
async cached(criteria) {
|
|
38
|
-
|
|
39
|
-
|
|
38
|
+
// The list now OPENS on Upcoming, so the default view must keep its offline-first paint:
|
|
39
|
+
// serve the cache for it too, minus the rows that have finished.
|
|
40
|
+
const upcoming = criteria.filter === "value:Upcoming";
|
|
41
|
+
if (criteria.query || (criteria.filter !== "all" && !upcoming) || criteria.sort !== "default") return undefined;
|
|
42
|
+
const rows = await readCached();
|
|
43
|
+
return { items: upcoming ? rows.filter((row) => row.statusLabel !== "Past") : rows, nextCursor: "", metadata: { fromCache: true } };
|
|
40
44
|
},
|
|
41
45
|
async fetch(criteria, cursor) {
|
|
42
46
|
if (!cursor) queryNow = new Date().toISOString();
|
|
43
47
|
if (criteria.filter === "saved" && !criteria.savedIds.length) return { items: [], nextCursor: "" };
|
|
44
48
|
const filter: Record<string, unknown> = { status: { $ne: "DRAFT" } };
|
|
45
|
-
|
|
49
|
+
// Prefix, not exact: the placeholder says "Search events", and an exact-title match returned
|
|
50
|
+
// nothing for "Harvest" when the event is "Harvest Tasting".
|
|
51
|
+
if (criteria.query) filter.title = { $startsWith: criteria.query };
|
|
46
52
|
if (criteria.filter === "saved") filter.id = { $in: criteria.savedIds };
|
|
47
|
-
|
|
53
|
+
// Upcoming = not started yet OR not finished yet: an event in progress (a festival on its
|
|
54
|
+
// second day) is still on. The start-date arm is what keeps a START-ONLY event (no endDate
|
|
55
|
+
// — valid in Wix Events) in the list; a filter on endDate alone dropped it from both views.
|
|
56
|
+
// Past stays "has started", so an in-progress event may appear under both; its row is only
|
|
57
|
+
// marked "Past" once it has actually finished (`eventIsPast`).
|
|
58
|
+
if (criteria.filter === "value:Upcoming") {
|
|
59
|
+
filter.$or = [
|
|
60
|
+
{ "dateAndTimeSettings.startDate": { $gte: queryNow } },
|
|
61
|
+
{ "dateAndTimeSettings.endDate": { $gte: queryNow } },
|
|
62
|
+
];
|
|
63
|
+
}
|
|
48
64
|
if (criteria.filter === "value:Past") filter["dateAndTimeSettings.startDate"] = { $lt: queryNow };
|
|
49
65
|
const res = await queryEvents({ limit: 50, offset: Number(cursor || 0), query: { filter,
|
|
50
66
|
sort: [{ fieldName: criteria.sort === "default" ? "dateAndTimeSettings.startDate" : "title", order: criteria.sort === "za" ? "DESC" : "ASC" }, { fieldName: "id", order: "ASC" }] } });
|
|
@@ -63,9 +63,9 @@ async function identityLine(): Promise<string> {
|
|
|
63
63
|
const identity = await dispatch("himi.wix.memberIdentity") as { email?: string } | null;
|
|
64
64
|
return identity?.email
|
|
65
65
|
? copyTemplate("myEvents.signedInAs", "Signed in as {email}", { email: identity.email })
|
|
66
|
-
: copyParam("myEvents.identityGuest", "RSVPs
|
|
66
|
+
: copyParam("myEvents.identityGuest", "RSVPs you confirm on this device appear here.");
|
|
67
67
|
} catch {
|
|
68
|
-
return copyParam("myEvents.identityGuest", "RSVPs
|
|
68
|
+
return copyParam("myEvents.identityGuest", "RSVPs you confirm on this device appear here.");
|
|
69
69
|
}
|
|
70
70
|
}
|
|
71
71
|
|
|
@@ -4,7 +4,7 @@ import { withEmptyFlags } from "../_shared/empty-flags.js";
|
|
|
4
4
|
import { listAnnouncements, type WixAnnouncement } from "@himalaya/wix-new-releases";
|
|
5
5
|
|
|
6
6
|
interface Row { id: string; name: string; subtitle: string }
|
|
7
|
-
interface S { status: "loading" | "ready"; items: Row[]; emptyText: string }
|
|
7
|
+
interface S { status: "loading" | "ready"; items: Row[]; emptyText: string; /** hiddenWhen hides on true: the empty card shows only once loaded AND empty. */ noEmpty: boolean }
|
|
8
8
|
|
|
9
9
|
function norm(a: WixAnnouncement, i: number): Row {
|
|
10
10
|
const aa = a as unknown as { id?: string; title?: string; bodyText?: string; description?: string };
|
|
@@ -12,14 +12,14 @@ function norm(a: WixAnnouncement, i: number): Row {
|
|
|
12
12
|
}
|
|
13
13
|
|
|
14
14
|
const svc = defineService<S, { load: (s: S) => Promise<S> }>("spacesWhatsNew", withEmptyFlags({
|
|
15
|
-
state: { status: "loading", items: [], emptyText: "" },
|
|
15
|
+
state: { status: "loading", items: [], emptyText: "", noEmpty: true },
|
|
16
16
|
actions: {
|
|
17
17
|
load: async (s) => {
|
|
18
18
|
try {
|
|
19
19
|
const r = await listAnnouncements(20);
|
|
20
20
|
const items = (((r as unknown as { announcements?: WixAnnouncement[] }).announcements) ?? []).map(norm);
|
|
21
|
-
return { status: "ready", items, emptyText: items.length ? "" : "Nothing new right now" };
|
|
22
|
-
} catch { return { ...s, status: "ready", items: [], emptyText: "Nothing new right now" }; }
|
|
21
|
+
return { status: "ready", items, emptyText: items.length ? "" : "Nothing new right now", noEmpty: items.length > 0 };
|
|
22
|
+
} catch { return { ...s, status: "ready", items: [], emptyText: "Nothing new right now", noEmpty: false }; }
|
|
23
23
|
},
|
|
24
24
|
},
|
|
25
25
|
}, { items: "noItems" }));
|