@wix/himalaya-cli 0.1482.0 → 0.1484.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/auth.mjs +4 -1
- package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/screens.mjs +4 -1
- package/dist/cli.mjs +71549 -71143
- package/dist/preview-assets.generated.bin +0 -0
- package/guides/qa-builds.md +22 -0
- package/package.json +2 -2
- package/templates/beauty-salon/tier5-src/_shared/collection-query.ts +13 -4
- package/templates/beauty-salon/tier5-src/_shared/collection-service.ts +2 -1
- package/templates/beauty-salon-owner/dev/index.ts +58 -19
- package/templates/beauty-salon-owner/tier5-src/_shared/collection-query.ts +13 -4
- package/templates/beauty-salon-owner/tier5-src/_shared/collection-service.ts +2 -1
- package/templates/beauty-salon-owner/tier5-src/himi-owner-lite-manage/index.ts +5 -3
- package/templates/beauty-salon-owner/tier5-src/himi-owner-lite-manage/logic.ts +30 -0
- package/templates/branded-lite/tier5-src/_shared/collection-query.ts +13 -4
- package/templates/branded-lite/tier5-src/_shared/collection-service.ts +2 -1
- package/templates/community-club/tier5-src/_shared/collection-query.ts +13 -4
- package/templates/community-club/tier5-src/_shared/collection-service.ts +2 -1
- package/templates/community-club-owner/dev/index.ts +58 -19
- package/templates/community-club-owner/tier5-src/_shared/collection-query.ts +13 -4
- package/templates/community-club-owner/tier5-src/_shared/collection-service.ts +2 -1
- package/templates/community-club-owner/tier5-src/himi-owner-lite-manage/index.ts +5 -3
- package/templates/community-club-owner/tier5-src/himi-owner-lite-manage/logic.ts +30 -0
- package/templates/events-meetups/tier5-src/_shared/collection-query.ts +13 -4
- package/templates/events-meetups/tier5-src/_shared/collection-service.ts +2 -1
- package/templates/events-meetups-owner/dev/index.ts +46 -16
- package/templates/events-meetups-owner/tier5-src/_shared/collection-query.ts +13 -4
- package/templates/events-meetups-owner/tier5-src/_shared/collection-service.ts +2 -1
- package/templates/events-meetups-owner/tier5-src/himi-owner-lite-manage/index.ts +5 -3
- package/templates/events-meetups-owner/tier5-src/himi-owner-lite-manage/logic.ts +30 -0
- package/templates/gym-fitness/tier5-src/_shared/collection-query.ts +13 -4
- package/templates/gym-fitness/tier5-src/_shared/collection-service.ts +2 -1
- package/templates/gym-fitness-owner/dev/index.ts +62 -20
- package/templates/gym-fitness-owner/tier5-src/_shared/collection-query.ts +13 -4
- package/templates/gym-fitness-owner/tier5-src/_shared/collection-service.ts +2 -1
- package/templates/gym-fitness-owner/tier5-src/himi-owner-lite-manage/index.ts +5 -3
- package/templates/gym-fitness-owner/tier5-src/himi-owner-lite-manage/logic.ts +30 -0
- package/templates/nonprofit-cause/tier5-src/_shared/collection-query.ts +13 -4
- package/templates/nonprofit-cause/tier5-src/_shared/collection-service.ts +2 -1
- package/templates/nonprofit-cause-owner/dev/index.ts +50 -17
- package/templates/nonprofit-cause-owner/tier5-src/_shared/collection-query.ts +13 -4
- package/templates/nonprofit-cause-owner/tier5-src/_shared/collection-service.ts +2 -1
- package/templates/nonprofit-cause-owner/tier5-src/himi-owner-lite-manage/index.ts +5 -3
- package/templates/nonprofit-cause-owner/tier5-src/himi-owner-lite-manage/logic.ts +30 -0
- package/templates/owner-lite/dev/index.ts +62 -20
- package/templates/owner-lite/tier5-src/_shared/collection-query.ts +13 -4
- package/templates/owner-lite/tier5-src/_shared/collection-service.ts +2 -1
- package/templates/owner-lite/tier5-src/himi-owner-lite-manage/index.ts +5 -3
- package/templates/owner-lite/tier5-src/himi-owner-lite-manage/logic.ts +30 -0
- package/templates/podcast-creator/tier5-src/_shared/collection-query.ts +13 -4
- package/templates/podcast-creator/tier5-src/_shared/collection-service.ts +2 -1
- package/templates/podcast-creator-owner/dev/index.ts +58 -19
- package/templates/podcast-creator-owner/tier5-src/_shared/collection-query.ts +13 -4
- package/templates/podcast-creator-owner/tier5-src/_shared/collection-service.ts +2 -1
- package/templates/podcast-creator-owner/tier5-src/himi-owner-lite-manage/index.ts +5 -3
- package/templates/podcast-creator-owner/tier5-src/himi-owner-lite-manage/logic.ts +30 -0
- package/templates/portfolio-creative/tier5-src/_shared/collection-query.ts +13 -4
- package/templates/portfolio-creative/tier5-src/_shared/collection-service.ts +2 -1
- package/templates/portfolio-creative-owner/dev/index.ts +58 -19
- package/templates/portfolio-creative-owner/tier5-src/_shared/collection-query.ts +13 -4
- package/templates/portfolio-creative-owner/tier5-src/_shared/collection-service.ts +2 -1
- package/templates/portfolio-creative-owner/tier5-src/himi-owner-lite-manage/index.ts +5 -3
- package/templates/portfolio-creative-owner/tier5-src/himi-owner-lite-manage/logic.ts +30 -0
- package/templates/restaurant/tier5-src/_shared/collection-query.ts +13 -4
- package/templates/restaurant/tier5-src/_shared/collection-service.ts +2 -1
- package/templates/restaurant-owner/dev/index.ts +62 -20
- package/templates/restaurant-owner/tier5-src/_shared/collection-query.ts +13 -4
- package/templates/restaurant-owner/tier5-src/_shared/collection-service.ts +2 -1
- package/templates/restaurant-owner/tier5-src/himi-owner-lite-manage/index.ts +5 -3
- package/templates/restaurant-owner/tier5-src/himi-owner-lite-manage/logic.ts +30 -0
- package/templates/retail-store/tier5-src/_shared/collection-query.ts +13 -4
- package/templates/retail-store/tier5-src/_shared/collection-service.ts +2 -1
- package/templates/retail-store-owner/dev/index.ts +54 -18
- package/templates/retail-store-owner/tier5-src/_shared/collection-query.ts +13 -4
- package/templates/retail-store-owner/tier5-src/_shared/collection-service.ts +2 -1
- package/templates/retail-store-owner/tier5-src/himi-owner-lite-manage/index.ts +5 -3
- package/templates/retail-store-owner/tier5-src/himi-owner-lite-manage/logic.ts +30 -0
- package/templates/yoga-studio/tier5-src/_shared/collection-query.ts +13 -4
- package/templates/yoga-studio/tier5-src/_shared/collection-service.ts +2 -1
- package/templates/yoga-studio-owner/dev/index.ts +50 -17
- package/templates/yoga-studio-owner/tier5-src/_shared/collection-query.ts +13 -4
- package/templates/yoga-studio-owner/tier5-src/_shared/collection-service.ts +2 -1
- package/templates/yoga-studio-owner/tier5-src/himi-owner-lite-manage/index.ts +5 -3
- package/templates/yoga-studio-owner/tier5-src/himi-owner-lite-manage/logic.ts +30 -0
|
@@ -49603,7 +49603,10 @@ const SCREENS = runtimeSetting({
|
|
|
49603
49603
|
"action": {
|
|
49604
49604
|
"actionId": "himi.open",
|
|
49605
49605
|
"params": {
|
|
49606
|
-
"screenId": "himi_owner_lite_sites"
|
|
49606
|
+
"screenId": "himi_owner_lite_sites",
|
|
49607
|
+
"title": "Your venues",
|
|
49608
|
+
"subtitle": "Choose a venue to run",
|
|
49609
|
+
"search": "button"
|
|
49607
49610
|
}
|
|
49608
49611
|
}
|
|
49609
49612
|
}
|
|
@@ -50793,7 +50796,10 @@ const SCREENS = runtimeSetting({
|
|
|
50793
50796
|
"actionId": "himi.open",
|
|
50794
50797
|
"params": {
|
|
50795
50798
|
"screenId": "himi_owner_lite_orders",
|
|
50796
|
-
"collectionFilter": "value:Recent 7 days"
|
|
50799
|
+
"collectionFilter": "value:Recent 7 days",
|
|
50800
|
+
"title": "Online orders",
|
|
50801
|
+
"subtitle": "Pickup and delivery tickets, newest first.",
|
|
50802
|
+
"search": "button"
|
|
50797
50803
|
}
|
|
50798
50804
|
},
|
|
50799
50805
|
"pressFeedback": "scale",
|
|
@@ -50862,7 +50868,10 @@ const SCREENS = runtimeSetting({
|
|
|
50862
50868
|
"actionId": "himi.open",
|
|
50863
50869
|
"params": {
|
|
50864
50870
|
"screenId": "himi_owner_lite_orders",
|
|
50865
|
-
"collectionFilter": "value:Recent 7 days"
|
|
50871
|
+
"collectionFilter": "value:Recent 7 days",
|
|
50872
|
+
"title": "Online orders",
|
|
50873
|
+
"subtitle": "Pickup and delivery tickets, newest first.",
|
|
50874
|
+
"search": "button"
|
|
50866
50875
|
}
|
|
50867
50876
|
},
|
|
50868
50877
|
"pressFeedback": "scale",
|
|
@@ -51079,7 +51088,10 @@ const SCREENS = runtimeSetting({
|
|
|
51079
51088
|
"actionId": "himi.open",
|
|
51080
51089
|
"params": {
|
|
51081
51090
|
"screenId": "himi_owner_lite_appointments",
|
|
51082
|
-
"collectionFilter": "all"
|
|
51091
|
+
"collectionFilter": "all",
|
|
51092
|
+
"title": "Covers booked",
|
|
51093
|
+
"subtitle": "Who’s coming in, at what time, and for how many.",
|
|
51094
|
+
"search": "button"
|
|
51083
51095
|
}
|
|
51084
51096
|
},
|
|
51085
51097
|
"pressFeedback": "scale",
|
|
@@ -51148,7 +51160,10 @@ const SCREENS = runtimeSetting({
|
|
|
51148
51160
|
"actionId": "himi.open",
|
|
51149
51161
|
"params": {
|
|
51150
51162
|
"screenId": "himi_owner_lite_events",
|
|
51151
|
-
"collectionFilter": "value:Upcoming"
|
|
51163
|
+
"collectionFilter": "value:Upcoming",
|
|
51164
|
+
"title": "Wine nights",
|
|
51165
|
+
"subtitle": "Tastings, supper clubs and chef’s specials on the calendar.",
|
|
51166
|
+
"search": "button"
|
|
51152
51167
|
}
|
|
51153
51168
|
},
|
|
51154
51169
|
"pressFeedback": "scale",
|
|
@@ -51229,7 +51244,10 @@ const SCREENS = runtimeSetting({
|
|
|
51229
51244
|
"actionId": "himi.open",
|
|
51230
51245
|
"params": {
|
|
51231
51246
|
"screenId": "himi_owner_lite_products",
|
|
51232
|
-
"collectionFilter": "all"
|
|
51247
|
+
"collectionFilter": "all",
|
|
51248
|
+
"title": "Menu",
|
|
51249
|
+
"subtitle": "Every dish you sell for pickup and delivery, with its price.",
|
|
51250
|
+
"search": "button"
|
|
51233
51251
|
}
|
|
51234
51252
|
},
|
|
51235
51253
|
"pressFeedback": "scale",
|
|
@@ -51298,7 +51316,10 @@ const SCREENS = runtimeSetting({
|
|
|
51298
51316
|
"actionId": "himi.open",
|
|
51299
51317
|
"params": {
|
|
51300
51318
|
"screenId": "himi_owner_lite_posts",
|
|
51301
|
-
"collectionFilter": "all"
|
|
51319
|
+
"collectionFilter": "all",
|
|
51320
|
+
"title": "Kitchen notes",
|
|
51321
|
+
"subtitle": "Suppliers, specials and news from the pass — drafts and published.",
|
|
51322
|
+
"search": "button"
|
|
51302
51323
|
}
|
|
51303
51324
|
},
|
|
51304
51325
|
"pressFeedback": "scale",
|
|
@@ -51367,7 +51388,10 @@ const SCREENS = runtimeSetting({
|
|
|
51367
51388
|
"actionId": "himi.open",
|
|
51368
51389
|
"params": {
|
|
51369
51390
|
"screenId": "himi_owner_lite_sites",
|
|
51370
|
-
"collectionFilter": "all"
|
|
51391
|
+
"collectionFilter": "all",
|
|
51392
|
+
"title": "Your venues",
|
|
51393
|
+
"subtitle": "Choose a venue to run",
|
|
51394
|
+
"search": "button"
|
|
51371
51395
|
}
|
|
51372
51396
|
},
|
|
51373
51397
|
"pressFeedback": "scale",
|
|
@@ -51461,7 +51485,9 @@ const SCREENS = runtimeSetting({
|
|
|
51461
51485
|
"action": {
|
|
51462
51486
|
"actionId": "himi.open",
|
|
51463
51487
|
"params": {
|
|
51464
|
-
"screenId": "himi_owner_lite_brief"
|
|
51488
|
+
"screenId": "himi_owner_lite_brief",
|
|
51489
|
+
"title": "Tonight’s service",
|
|
51490
|
+
"subtitle": "Covers, open tickets and 86’d dishes, laid out for you."
|
|
51465
51491
|
}
|
|
51466
51492
|
}
|
|
51467
51493
|
}
|
|
@@ -51816,7 +51842,8 @@ const SCREENS = runtimeSetting({
|
|
|
51816
51842
|
"action": {
|
|
51817
51843
|
"actionId": "himi.open",
|
|
51818
51844
|
"params": {
|
|
51819
|
-
"screenId": "himi_owner_lite_manage"
|
|
51845
|
+
"screenId": "himi_owner_lite_manage",
|
|
51846
|
+
"search": "drawer"
|
|
51820
51847
|
}
|
|
51821
51848
|
}
|
|
51822
51849
|
}
|
|
@@ -52843,7 +52870,10 @@ const SCREENS = runtimeSetting({
|
|
|
52843
52870
|
"onTap": {
|
|
52844
52871
|
"actionId": "himi.open",
|
|
52845
52872
|
"params": {
|
|
52846
|
-
"screenId": "himi_owner_lite_search"
|
|
52873
|
+
"screenId": "himi_owner_lite_search",
|
|
52874
|
+
"title": "Search records",
|
|
52875
|
+
"subtitle": "Across your business areas",
|
|
52876
|
+
"search": "drawer"
|
|
52847
52877
|
}
|
|
52848
52878
|
},
|
|
52849
52879
|
"pressFeedback": "scale",
|
|
@@ -53043,7 +53073,9 @@ const SCREENS = runtimeSetting({
|
|
|
53043
53073
|
"onTap": {
|
|
53044
53074
|
"actionId": "himi.open",
|
|
53045
53075
|
"params": {
|
|
53046
|
-
"screenId": "himi_owner_lite_analytics"
|
|
53076
|
+
"screenId": "himi_owner_lite_analytics",
|
|
53077
|
+
"title": "Analytics",
|
|
53078
|
+
"subtitle": "How your site is doing"
|
|
53047
53079
|
}
|
|
53048
53080
|
},
|
|
53049
53081
|
"pressFeedback": "scale",
|
|
@@ -53067,7 +53099,7 @@ const SCREENS = runtimeSetting({
|
|
|
53067
53099
|
"onAppear": {
|
|
53068
53100
|
"actionId": "tier5.himiOwnerLiteManage.load",
|
|
53069
53101
|
"params": {
|
|
53070
|
-
"areas": "[{\"id\":\"store\",\"title\":\"Menu\",\"subtitle\":\"Products, inventory and sales\",\"groupId\":\"commerce\",\"group\":\"Commerce\",\"screenId\":\"himi_owner_lite_products\",\"icon\":\"bag\",\"metricKey\":\"products\",\"countLabel\":\"products\",\"createScreenId\":\"himi_owner_lite_product_new\",\"createLabel\":\"Create product\",\"handoffLabel\":\"Open in Wix: Menu\"},{\"id\":\"himi_owner_lite_orders\",\"title\":\"Online orders\",\"subtitle\":\"Review and complete customer orders\",\"groupId\":\"commerce\",\"group\":\"Commerce\",\"screenId\":\"himi_owner_lite_orders\",\"icon\":\"cart\",\"metricKey\":\"orders\",\"countLabel\":\"orders\",\"handoffLabel\":\"Open in Wix: Online orders\"},{\"id\":\"bookings\",\"title\":\"Private dining\",\"subtitle\":\"Services and your schedule\",\"groupId\":\"scheduling\",\"group\":\"Scheduling\",\"screenId\":\"himi_owner_lite_services\",\"icon\":\"calendar\",\"metricKey\":\"services\",\"countLabel\":\"services\",\"handoffLabel\":\"Open in Wix: Private dining\"},{\"id\":\"himi_owner_lite_appointments\",\"title\":\"Covers booked\",\"subtitle\":\"Your upcoming appointments\",\"groupId\":\"scheduling\",\"group\":\"Scheduling\",\"screenId\":\"himi_owner_lite_appointments\",\"icon\":\"clock\",\"metricKey\":\"appointments\",\"countLabel\":\"appointments\",\"handoffLabel\":\"Open in Wix: Covers booked\"},{\"id\":\"events\",\"title\":\"Wine nights\",\"subtitle\":\"Events and attendance\",\"groupId\":\"scheduling\",\"group\":\"Scheduling\",\"screenId\":\"himi_owner_lite_events\",\"icon\":\"calendar\",\"metricKey\":\"events\",\"countLabel\":\"events\",\"handoffLabel\":\"Open in Wix: Wine nights\"},{\"id\":\"blog\",\"title\":\"Kitchen notes\",\"subtitle\":\"Stories and publishing\",\"groupId\":\"content\",\"group\":\"Content\",\"screenId\":\"himi_owner_lite_posts\",\"icon\":\"newspaper\",\"metricKey\":\"posts\",\"countLabel\":\"posts\",\"createScreenId\":\"himi_owner_lite_post_new\",\"createLabel\":\"Write post\",\"handoffLabel\":\"Open in Wix: Kitchen notes\"},{\"id\":\"coupons\",\"title\":\"Coupons\",\"subtitle\":\"Offers, codes and usage\",\"groupId\":\"commerce\",\"group\":\"Commerce\",\"screenId\":\"himi_owner_lite_module_coupons\",\"icon\":\"tag\",\"metricKey\":\"module:coupons\",\"countLabel\":\"coupons\",\"handoffLabel\":\"Open in Wix: Coupons\"},{\"id\":\"invoices\",\"title\":\"Invoices\",\"subtitle\":\"Customers, balances and payment status\",\"groupId\":\"commerce\",\"group\":\"Commerce\",\"screenId\":\"himi_owner_lite_module_invoices\",\"icon\":\"document\",\"metricKey\":\"module:invoices\",\"countLabel\":\"invoices\",\"handoffLabel\":\"Open in Wix: Invoices\"},{\"id\":\"giftCards\",\"title\":\"Gift cards\",\"subtitle\":\"Balances, recipients and expiration\",\"groupId\":\"commerce\",\"group\":\"Commerce\",\"screenId\":\"himi_owner_lite_module_giftCards\",\"icon\":\"ticket\",\"metricKey\":\"module:giftCards\",\"countLabel\":\"gift cards\",\"handoffLabel\":\"Open in Wix: Gift cards\"},{\"id\":\"contacts\",\"title\":\"Contacts\",\"subtitle\":\"Your customer relationships\",\"groupId\":\"people-and-community\",\"group\":\"People and community\",\"screenId\":\"himi_owner_lite_module_contacts\",\"icon\":\"person\",\"metricKey\":\"module:contacts\",\"countLabel\":\"contacts\",\"handoffLabel\":\"Open in Wix: Contacts\"},{\"id\":\"members\",\"title\":\"Members\",\"subtitle\":\"Membership access and profiles\",\"groupId\":\"people-and-community\",\"group\":\"People and community\",\"screenId\":\"himi_owner_lite_module_members\",\"icon\":\"person\",\"metricKey\":\"module:members\",\"countLabel\":\"members\",\"handoffLabel\":\"Open in Wix: Members\"},{\"id\":\"groups\",\"title\":\"Groups\",\"subtitle\":\"Communities and conversations\",\"groupId\":\"people-and-community\",\"group\":\"People and community\",\"screenId\":\"himi_owner_lite_module_groups\",\"icon\":\"person\",\"metricKey\":\"module:groups\",\"countLabel\":\"groups\",\"handoffLabel\":\"Open in Wix: Groups\"},{\"id\":\"reviews\",\"title\":\"Reviews\",\"subtitle\":\"Published and pending customer feedback\",\"groupId\":\"people-and-community\",\"group\":\"People and community\",\"screenId\":\"himi_owner_lite_module_reviews\",\"icon\":\"star\",\"metricKey\":\"module:reviews\",\"countLabel\":\"reviews\",\"handoffLabel\":\"Open in Wix: Reviews\"},{\"id\":\"plans\",\"title\":\"Plans\",\"subtitle\":\"Pricing, benefits and visibility\",\"groupId\":\"membership-and-learning\",\"group\":\"Membership and learning\",\"screenId\":\"himi_owner_lite_module_plans\",\"icon\":\"bookmark\",\"metricKey\":\"module:plans\",\"countLabel\":\"plans\",\"handoffLabel\":\"Open in Wix: Plans\"},{\"id\":\"subscriptions\",\"title\":\"Subscriptions\",\"subtitle\":\"Member plans and subscription status\",\"groupId\":\"membership-and-learning\",\"group\":\"Membership and learning\",\"screenId\":\"himi_owner_lite_module_subscriptions\",\"icon\":\"bookmark\",\"metricKey\":\"module:subscriptions\",\"countLabel\":\"subscriptions\",\"handoffLabel\":\"Open in Wix: Subscriptions\"},{\"id\":\"programs\",\"title\":\"Programs\",\"subtitle\":\"Learning experiences and participation\",\"groupId\":\"membership-and-learning\",\"group\":\"Membership and learning\",\"screenId\":\"himi_owner_lite_module_programs\",\"icon\":\"play\",\"metricKey\":\"module:programs\",\"countLabel\":\"programs\",\"handoffLabel\":\"Open in Wix: Programs\"},{\"id\":\"badges\",\"title\":\"Badges\",\"subtitle\":\"Recognition, access and member badges\",\"groupId\":\"membership-and-learning\",\"group\":\"Membership and learning\",\"screenId\":\"himi_owner_lite_module_badges\",\"icon\":\"star\",\"metricKey\":\"module:badges\",\"countLabel\":\"badges\",\"handoffLabel\":\"Open in Wix: Badges\"},{\"id\":\"reservations\",\"title\":\"Reservations\",\"subtitle\":\"Guests, tables and arrival times\",\"groupId\":\"scheduling\",\"group\":\"Scheduling\",\"screenId\":\"himi_owner_lite_module_reservations\",\"icon\":\"calendar\",\"metricKey\":\"module:reservations\",\"countLabel\":\"reservations\",\"handoffLabel\":\"Open in Wix: Reservations\"},{\"id\":\"forms\",\"title\":\"Forms\",\"subtitle\":\"Forms and their configuration\",\"groupId\":\"content\",\"group\":\"Content\",\"screenId\":\"himi_owner_lite_module_forms\",\"icon\":\"document\",\"metricKey\":\"module:forms\",\"countLabel\":\"forms\",\"handoffLabel\":\"Open in Wix: Forms\"},{\"id\":\"portfolio\",\"title\":\"Portfolio\",\"subtitle\":\"Projects, stories and galleries\",\"groupId\":\"content\",\"group\":\"Content\",\"screenId\":\"himi_owner_lite_module_portfolio\",\"icon\":\"image\",\"metricKey\":\"module:portfolio\",\"countLabel\":\"portfolio\",\"handoffLabel\":\"Open in Wix: Portfolio\"},{\"id\":\"donationCampaigns\",\"title\":\"Donation campaigns\",\"subtitle\":\"Campaign goals, status and fundraising\",\"groupId\":\"content\",\"group\":\"Content\",\"screenId\":\"himi_owner_lite_module_donationCampaigns\",\"icon\":\"heart\",\"metricKey\":\"module:donationCampaigns\",\"countLabel\":\"donation campaigns\",\"handoffLabel\":\"Open in Wix: Donation campaigns\"}]",
|
|
53102
|
+
"areas": "[{\"id\":\"store\",\"title\":\"Menu\",\"subtitle\":\"Products, inventory and sales\",\"groupId\":\"commerce\",\"group\":\"Commerce\",\"screenId\":\"himi_owner_lite_products\",\"icon\":\"bag\",\"metricKey\":\"products\",\"countLabel\":\"products\",\"createScreenId\":\"himi_owner_lite_product_new\",\"createLabel\":\"Create product\",\"handoffLabel\":\"Open in Wix: Menu\",\"navigation\":{\"title\":\"Menu\",\"subtitle\":\"Every dish you sell for pickup and delivery, with its price.\",\"search\":\"button\"}},{\"id\":\"himi_owner_lite_orders\",\"title\":\"Online orders\",\"subtitle\":\"Review and complete customer orders\",\"groupId\":\"commerce\",\"group\":\"Commerce\",\"screenId\":\"himi_owner_lite_orders\",\"icon\":\"cart\",\"metricKey\":\"orders\",\"countLabel\":\"orders\",\"handoffLabel\":\"Open in Wix: Online orders\",\"navigation\":{\"title\":\"Online orders\",\"subtitle\":\"Pickup and delivery tickets, newest first.\",\"search\":\"button\"}},{\"id\":\"bookings\",\"title\":\"Private dining\",\"subtitle\":\"Services and your schedule\",\"groupId\":\"scheduling\",\"group\":\"Scheduling\",\"screenId\":\"himi_owner_lite_services\",\"icon\":\"calendar\",\"metricKey\":\"services\",\"countLabel\":\"services\",\"handoffLabel\":\"Open in Wix: Private dining\",\"navigation\":{\"title\":\"Private dining\",\"subtitle\":\"Chef’s table, function room and tasting menus guests can book.\",\"search\":\"button\"}},{\"id\":\"himi_owner_lite_appointments\",\"title\":\"Covers booked\",\"subtitle\":\"Your upcoming appointments\",\"groupId\":\"scheduling\",\"group\":\"Scheduling\",\"screenId\":\"himi_owner_lite_appointments\",\"icon\":\"clock\",\"metricKey\":\"appointments\",\"countLabel\":\"appointments\",\"handoffLabel\":\"Open in Wix: Covers booked\",\"navigation\":{\"title\":\"Covers booked\",\"subtitle\":\"Who’s coming in, at what time, and for how many.\",\"search\":\"button\"}},{\"id\":\"events\",\"title\":\"Wine nights\",\"subtitle\":\"Events and attendance\",\"groupId\":\"scheduling\",\"group\":\"Scheduling\",\"screenId\":\"himi_owner_lite_events\",\"icon\":\"calendar\",\"metricKey\":\"events\",\"countLabel\":\"events\",\"handoffLabel\":\"Open in Wix: Wine nights\",\"navigation\":{\"title\":\"Wine nights\",\"subtitle\":\"Tastings, supper clubs and chef’s specials on the calendar.\",\"search\":\"button\"}},{\"id\":\"blog\",\"title\":\"Kitchen notes\",\"subtitle\":\"Stories and publishing\",\"groupId\":\"content\",\"group\":\"Content\",\"screenId\":\"himi_owner_lite_posts\",\"icon\":\"newspaper\",\"metricKey\":\"posts\",\"countLabel\":\"posts\",\"createScreenId\":\"himi_owner_lite_post_new\",\"createLabel\":\"Write post\",\"handoffLabel\":\"Open in Wix: Kitchen notes\",\"navigation\":{\"title\":\"Kitchen notes\",\"subtitle\":\"Suppliers, specials and news from the pass — drafts and published.\",\"search\":\"button\"}},{\"id\":\"coupons\",\"title\":\"Coupons\",\"subtitle\":\"Offers, codes and usage\",\"groupId\":\"commerce\",\"group\":\"Commerce\",\"screenId\":\"himi_owner_lite_module_coupons\",\"icon\":\"tag\",\"metricKey\":\"module:coupons\",\"countLabel\":\"coupons\",\"handoffLabel\":\"Open in Wix: Coupons\",\"navigation\":{\"title\":\"Coupons\",\"subtitle\":\"Offers, codes and usage\",\"search\":\"button\"}},{\"id\":\"invoices\",\"title\":\"Invoices\",\"subtitle\":\"Customers, balances and payment status\",\"groupId\":\"commerce\",\"group\":\"Commerce\",\"screenId\":\"himi_owner_lite_module_invoices\",\"icon\":\"document\",\"metricKey\":\"module:invoices\",\"countLabel\":\"invoices\",\"handoffLabel\":\"Open in Wix: Invoices\",\"navigation\":{\"title\":\"Invoices\",\"subtitle\":\"Customers, balances and payment status\",\"search\":\"button\"}},{\"id\":\"giftCards\",\"title\":\"Gift cards\",\"subtitle\":\"Balances, recipients and expiration\",\"groupId\":\"commerce\",\"group\":\"Commerce\",\"screenId\":\"himi_owner_lite_module_giftCards\",\"icon\":\"ticket\",\"metricKey\":\"module:giftCards\",\"countLabel\":\"gift cards\",\"handoffLabel\":\"Open in Wix: Gift cards\",\"navigation\":{\"title\":\"Gift cards\",\"subtitle\":\"Balances, recipients and expiration\",\"search\":\"button\"}},{\"id\":\"contacts\",\"title\":\"Contacts\",\"subtitle\":\"Your customer relationships\",\"groupId\":\"people-and-community\",\"group\":\"People and community\",\"screenId\":\"himi_owner_lite_module_contacts\",\"icon\":\"person\",\"metricKey\":\"module:contacts\",\"countLabel\":\"contacts\",\"handoffLabel\":\"Open in Wix: Contacts\",\"navigation\":{\"title\":\"Contacts\",\"subtitle\":\"Your customer relationships\",\"search\":\"button\"}},{\"id\":\"members\",\"title\":\"Members\",\"subtitle\":\"Membership access and profiles\",\"groupId\":\"people-and-community\",\"group\":\"People and community\",\"screenId\":\"himi_owner_lite_module_members\",\"icon\":\"person\",\"metricKey\":\"module:members\",\"countLabel\":\"members\",\"handoffLabel\":\"Open in Wix: Members\",\"navigation\":{\"title\":\"Members\",\"subtitle\":\"Membership access and profiles\",\"search\":\"button\"}},{\"id\":\"groups\",\"title\":\"Groups\",\"subtitle\":\"Communities and conversations\",\"groupId\":\"people-and-community\",\"group\":\"People and community\",\"screenId\":\"himi_owner_lite_module_groups\",\"icon\":\"person\",\"metricKey\":\"module:groups\",\"countLabel\":\"groups\",\"handoffLabel\":\"Open in Wix: Groups\",\"navigation\":{\"title\":\"Groups\",\"subtitle\":\"Communities and conversations\",\"search\":\"button\"}},{\"id\":\"reviews\",\"title\":\"Reviews\",\"subtitle\":\"Published and pending customer feedback\",\"groupId\":\"people-and-community\",\"group\":\"People and community\",\"screenId\":\"himi_owner_lite_module_reviews\",\"icon\":\"star\",\"metricKey\":\"module:reviews\",\"countLabel\":\"reviews\",\"handoffLabel\":\"Open in Wix: Reviews\",\"navigation\":{\"title\":\"Reviews\",\"subtitle\":\"Published and pending customer feedback\",\"search\":\"button\"}},{\"id\":\"plans\",\"title\":\"Plans\",\"subtitle\":\"Pricing, benefits and visibility\",\"groupId\":\"membership-and-learning\",\"group\":\"Membership and learning\",\"screenId\":\"himi_owner_lite_module_plans\",\"icon\":\"bookmark\",\"metricKey\":\"module:plans\",\"countLabel\":\"plans\",\"handoffLabel\":\"Open in Wix: Plans\",\"navigation\":{\"title\":\"Plans\",\"subtitle\":\"Pricing, benefits and visibility\",\"search\":\"button\"}},{\"id\":\"subscriptions\",\"title\":\"Subscriptions\",\"subtitle\":\"Member plans and subscription status\",\"groupId\":\"membership-and-learning\",\"group\":\"Membership and learning\",\"screenId\":\"himi_owner_lite_module_subscriptions\",\"icon\":\"bookmark\",\"metricKey\":\"module:subscriptions\",\"countLabel\":\"subscriptions\",\"handoffLabel\":\"Open in Wix: Subscriptions\",\"navigation\":{\"title\":\"Subscriptions\",\"subtitle\":\"Member plans and subscription status\",\"search\":\"button\"}},{\"id\":\"programs\",\"title\":\"Programs\",\"subtitle\":\"Learning experiences and participation\",\"groupId\":\"membership-and-learning\",\"group\":\"Membership and learning\",\"screenId\":\"himi_owner_lite_module_programs\",\"icon\":\"play\",\"metricKey\":\"module:programs\",\"countLabel\":\"programs\",\"handoffLabel\":\"Open in Wix: Programs\",\"navigation\":{\"title\":\"Programs\",\"subtitle\":\"Learning experiences and participation\",\"search\":\"button\"}},{\"id\":\"badges\",\"title\":\"Badges\",\"subtitle\":\"Recognition, access and member badges\",\"groupId\":\"membership-and-learning\",\"group\":\"Membership and learning\",\"screenId\":\"himi_owner_lite_module_badges\",\"icon\":\"star\",\"metricKey\":\"module:badges\",\"countLabel\":\"badges\",\"handoffLabel\":\"Open in Wix: Badges\",\"navigation\":{\"title\":\"Badges\",\"subtitle\":\"Recognition, access and member badges\",\"search\":\"button\"}},{\"id\":\"reservations\",\"title\":\"Reservations\",\"subtitle\":\"Guests, tables and arrival times\",\"groupId\":\"scheduling\",\"group\":\"Scheduling\",\"screenId\":\"himi_owner_lite_module_reservations\",\"icon\":\"calendar\",\"metricKey\":\"module:reservations\",\"countLabel\":\"reservations\",\"handoffLabel\":\"Open in Wix: Reservations\",\"navigation\":{\"title\":\"Reservations\",\"subtitle\":\"Guests, tables and arrival times\",\"search\":\"button\"}},{\"id\":\"forms\",\"title\":\"Forms\",\"subtitle\":\"Forms and their configuration\",\"groupId\":\"content\",\"group\":\"Content\",\"screenId\":\"himi_owner_lite_module_forms\",\"icon\":\"document\",\"metricKey\":\"module:forms\",\"countLabel\":\"forms\",\"handoffLabel\":\"Open in Wix: Forms\",\"navigation\":{\"title\":\"Forms\",\"subtitle\":\"Forms and their configuration\",\"search\":\"button\"}},{\"id\":\"portfolio\",\"title\":\"Portfolio\",\"subtitle\":\"Projects, stories and galleries\",\"groupId\":\"content\",\"group\":\"Content\",\"screenId\":\"himi_owner_lite_module_portfolio\",\"icon\":\"image\",\"metricKey\":\"module:portfolio\",\"countLabel\":\"portfolio\",\"handoffLabel\":\"Open in Wix: Portfolio\",\"navigation\":{\"title\":\"Portfolio\",\"subtitle\":\"Projects, stories and galleries\",\"search\":\"button\"}},{\"id\":\"donationCampaigns\",\"title\":\"Donation campaigns\",\"subtitle\":\"Campaign goals, status and fundraising\",\"groupId\":\"content\",\"group\":\"Content\",\"screenId\":\"himi_owner_lite_module_donationCampaigns\",\"icon\":\"heart\",\"metricKey\":\"module:donationCampaigns\",\"countLabel\":\"donation campaigns\",\"handoffLabel\":\"Open in Wix: Donation campaigns\",\"navigation\":{\"title\":\"Donation campaigns\",\"subtitle\":\"Campaign goals, status and fundraising\",\"search\":\"button\"}}]",
|
|
53071
53103
|
"copy": "{\"ownerManage.blogLabel\":\"Kitchen notes\",\"ownerManage.bookingsLabel\":\"Private dining\",\"ownerManage.eventsLabel\":\"Wine nights\",\"ownerManage.storeLabel\":\"Menu\",\"ownerManage.title\":\"Front of house\"}",
|
|
53072
53104
|
"businessName": "__HIMI_APP_NAME__"
|
|
53073
53105
|
}
|
|
@@ -55581,7 +55613,9 @@ const SCREENS = runtimeSetting({
|
|
|
55581
55613
|
"onTap": {
|
|
55582
55614
|
"actionId": "himi.open",
|
|
55583
55615
|
"params": {
|
|
55584
|
-
"screenId": "himi_owner_lite_analytics_report"
|
|
55616
|
+
"screenId": "himi_owner_lite_analytics_report",
|
|
55617
|
+
"title": "Build a report",
|
|
55618
|
+
"subtitle": "Any subject area your site tracks"
|
|
55585
55619
|
}
|
|
55586
55620
|
},
|
|
55587
55621
|
"pressFeedback": "highlight"
|
|
@@ -56737,7 +56771,8 @@ const SCREENS = runtimeSetting({
|
|
|
56737
56771
|
"action": {
|
|
56738
56772
|
"actionId": "himi.open",
|
|
56739
56773
|
"params": {
|
|
56740
|
-
"screenId": "himi_owner_lite_manage"
|
|
56774
|
+
"screenId": "himi_owner_lite_manage",
|
|
56775
|
+
"search": "drawer"
|
|
56741
56776
|
}
|
|
56742
56777
|
}
|
|
56743
56778
|
}
|
|
@@ -57374,7 +57409,8 @@ const SCREENS = runtimeSetting({
|
|
|
57374
57409
|
"action": {
|
|
57375
57410
|
"actionId": "himi.open",
|
|
57376
57411
|
"params": {
|
|
57377
|
-
"screenId": "himi_owner_lite_manage"
|
|
57412
|
+
"screenId": "himi_owner_lite_manage",
|
|
57413
|
+
"search": "drawer"
|
|
57378
57414
|
}
|
|
57379
57415
|
}
|
|
57380
57416
|
}
|
|
@@ -62571,7 +62607,9 @@ const SCREENS = runtimeSetting({
|
|
|
62571
62607
|
"onTap": {
|
|
62572
62608
|
"actionId": "himi.open",
|
|
62573
62609
|
"params": {
|
|
62574
|
-
"screenId": "himi_owner_lite_aria_history"
|
|
62610
|
+
"screenId": "himi_owner_lite_aria_history",
|
|
62611
|
+
"title": "Conversations",
|
|
62612
|
+
"subtitle": "Pick up where you left off."
|
|
62575
62613
|
}
|
|
62576
62614
|
},
|
|
62577
62615
|
"accessibilityLabel": "History",
|
|
@@ -63878,7 +63916,8 @@ const SCREENS = runtimeSetting({
|
|
|
63878
63916
|
"actionId": "himi.open",
|
|
63879
63917
|
"params": {
|
|
63880
63918
|
"screenId": "himi_owner_lite_aria",
|
|
63881
|
-
"conversationId": "$item.id"
|
|
63919
|
+
"conversationId": "$item.id",
|
|
63920
|
+
"title": "Aria"
|
|
63882
63921
|
}
|
|
63883
63922
|
}
|
|
63884
63923
|
}
|
|
@@ -64016,7 +64055,9 @@ const SCREENS = runtimeSetting({
|
|
|
64016
64055
|
"action": {
|
|
64017
64056
|
"actionId": "himi.open",
|
|
64018
64057
|
"params": {
|
|
64019
|
-
"screenId": "himi_owner_lite_overview"
|
|
64058
|
+
"screenId": "himi_owner_lite_overview",
|
|
64059
|
+
"title": "Across your businesses",
|
|
64060
|
+
"subtitle": "What needs you, everywhere at once"
|
|
64020
64061
|
}
|
|
64021
64062
|
}
|
|
64022
64063
|
}
|
|
@@ -88805,7 +88846,8 @@ const TEMPLATED: { pattern: string; display: string; liveSeed?: LiveSeed; static
|
|
|
88805
88846
|
"action": {
|
|
88806
88847
|
"actionId": "himi.open",
|
|
88807
88848
|
"params": {
|
|
88808
|
-
"screenId": "himi_owner_lite_manage"
|
|
88849
|
+
"screenId": "himi_owner_lite_manage",
|
|
88850
|
+
"search": "drawer"
|
|
88809
88851
|
}
|
|
88810
88852
|
}
|
|
88811
88853
|
}
|
|
@@ -84,14 +84,17 @@ export function createCollectionQuery<Row>(source: CollectionQuerySource<Row>, p
|
|
|
84
84
|
}
|
|
85
85
|
return result;
|
|
86
86
|
};
|
|
87
|
-
|
|
87
|
+
/** [keepRows]: a search typed over the rows on screen leaves them there until its answer arrives (status stays
|
|
88
|
+
* `loading`, and nothing pages under the old answer), so the list is not blanked on each keystroke. */
|
|
89
|
+
const fetch = async (append: boolean, keepRows = false): Promise<void> => {
|
|
88
90
|
if (disposed || (append && (state.loadingMore || state.status === 'loading' || !state.nextCursor))) return;
|
|
89
91
|
const revision = append ? generation : ++generation;
|
|
90
92
|
const cursor = append ? state.nextCursor : '';
|
|
91
93
|
const criteria = copyQuery(state.criteria);
|
|
92
94
|
if (!append) loadedPages = 0;
|
|
93
95
|
state = { ...state, status: append ? 'ready' : 'loading', loadingMore: append, pageError: false, error: '',
|
|
94
|
-
...(append ? {} :
|
|
96
|
+
...(append ? {} : keepRows ? { nextCursor: '', complete: false, provisional: false }
|
|
97
|
+
: { items: [], nextCursor: '', total: undefined, metadata: undefined, complete: false, provisional: false }) };
|
|
95
98
|
emit();
|
|
96
99
|
try {
|
|
97
100
|
if (!append && source.cached) {
|
|
@@ -117,7 +120,9 @@ export function createCollectionQuery<Row>(source: CollectionQuerySource<Row>, p
|
|
|
117
120
|
clearedByError = clear || /HTTP 40[13]\b/.test(String(error));
|
|
118
121
|
if (clearedByError) lastShown = undefined;
|
|
119
122
|
if (clear) loadedPages = 0;
|
|
120
|
-
|
|
123
|
+
// The rows a typed search kept on screen while it ran were never its answer: a failed one shows none of them.
|
|
124
|
+
const drop = clear || keepRows;
|
|
125
|
+
state = { ...state, ...(drop ? { items: [], nextCursor: '', total: undefined, metadata: undefined } : {}),
|
|
121
126
|
status: append && !clear ? 'ready' : 'error', loadingMore: false, pageError: append && !clear, complete: false,
|
|
122
127
|
provisional: false, error: source.errorMessage?.(error) ?? '' };
|
|
123
128
|
}
|
|
@@ -134,9 +139,13 @@ export function createCollectionQuery<Row>(source: CollectionQuerySource<Row>, p
|
|
|
134
139
|
const count = restorePages && same ? Math.max(loadedPages, restoringPages, 1) : 1;
|
|
135
140
|
const showing = lastShown && sameCriteria(lastShown.state.criteria, next) ? lastShown : undefined;
|
|
136
141
|
restoringPages = count;
|
|
142
|
+
// Only the search text changed: the user is typing over the rows on screen, also while the last keystroke's
|
|
143
|
+
// search is still out.
|
|
144
|
+
const typing = !same && (state.status === 'ready' || state.status === 'loading')
|
|
145
|
+
&& sameCriteria({ ...state.criteria, query: '' }, { ...next, query: '' });
|
|
137
146
|
state = { ...state, criteria: next };
|
|
138
147
|
if (revalidate && showing) { revalidating = generation + 1; clearedByError = false; }
|
|
139
|
-
const pending = fetch(false);
|
|
148
|
+
const pending = fetch(false, typing);
|
|
140
149
|
const revision = generation;
|
|
141
150
|
await pending;
|
|
142
151
|
// Re-appearance revalidates every previously opened page using fresh
|
|
@@ -194,7 +194,8 @@ export function decorateCollection(name: string, def: { state: State; actions?:
|
|
|
194
194
|
noSignIn: !signInRequired,
|
|
195
195
|
errorTitle: signInRequired ? copyParam('collection.signInTitle', 'Sign in to see this') : copyParam('collection.loadErrorTitle', 'This collection could not load'),
|
|
196
196
|
errorMessage,
|
|
197
|
-
|
|
197
|
+
// A skeleton only with nothing to show: a search re-running over the rows on screen keeps them.
|
|
198
|
+
noLoading: !loading || rows.length > 0,
|
|
198
199
|
// De-dup against a domain that paints its OWN empty block (screen-kit emptyBlock is
|
|
199
200
|
// gated on the domain's top-level `noEmpty`): only one empty state ever shows.
|
|
200
201
|
noEmptySource: !sourceEmpty || s.noEmpty === false,
|
|
@@ -17,7 +17,7 @@ import { OWNER_MODULES, ownerModuleId } from '../_shared/owner-modules.js';
|
|
|
17
17
|
import { localPreferences } from '../_shared/local-preferences.js';
|
|
18
18
|
import { stashCopy, copyParam, copyTemplate } from '../_shared/himi-copy.js';
|
|
19
19
|
import { fallbackNameFrom, selectedSiteName } from '../_shared/owner-selected-site.js';
|
|
20
|
-
import { DASHBOARD_PATHS, deriveManage, parseAreas, recentAreas, metricFailure, rememberArea, withMetrics, type ManageArea, type Metric, type MetricFailure } from './logic.js';
|
|
20
|
+
import { DASHBOARD_PATHS, deriveManage, navigationArgs, parseAreas, recentAreas, metricFailure, rememberArea, withMetrics, type ManageArea, type Metric, type MetricFailure } from './logic.js';
|
|
21
21
|
|
|
22
22
|
interface State {
|
|
23
23
|
/** The business the header names: the one picked on Sites, else the descriptor's
|
|
@@ -339,13 +339,15 @@ const svc = defineService<State, {
|
|
|
339
339
|
const area = findArea(state, arg);
|
|
340
340
|
if (!area) return state;
|
|
341
341
|
const next = remember(state, area);
|
|
342
|
-
|
|
342
|
+
const args = navigationArgs(area.navigation);
|
|
343
|
+
return navigate(next, { screenId: area.screenId, ...(args ? { args } : {}) }) as State;
|
|
343
344
|
},
|
|
344
345
|
create: (state, arg) => {
|
|
345
346
|
const area = findArea(state, arg);
|
|
346
347
|
if (!area?.createScreenId) return state;
|
|
347
348
|
const next = remember(state, area);
|
|
348
|
-
|
|
349
|
+
const args = navigationArgs(area.createNavigation);
|
|
350
|
+
return navigate(next, { screenId: area.createScreenId, ...(args ? { args } : {}) }) as State;
|
|
349
351
|
},
|
|
350
352
|
handoff: async (state, arg) => {
|
|
351
353
|
const area = findArea(state, arg);
|
|
@@ -52,6 +52,34 @@ export interface ManageArea {
|
|
|
52
52
|
hideHandoff?: boolean;
|
|
53
53
|
/** The accessible name of this area's "Open in Wix", which carries the area ("Open in Wix: Store"). */
|
|
54
54
|
handoffLabel?: string;
|
|
55
|
+
/** The navigation its page declares (`hostTitle`, `topBar.searchable`), for the host's bar the moment it opens it. */
|
|
56
|
+
navigation?: ManageNavigation;
|
|
57
|
+
/** The same for its create screen. */
|
|
58
|
+
createNavigation?: ManageNavigation;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
/** A page's navigation as the build declares it: its title and subtitle, and where its search goes (none without one). */
|
|
62
|
+
export interface ManageNavigation {
|
|
63
|
+
title?: string;
|
|
64
|
+
subtitle?: string;
|
|
65
|
+
search?: "drawer" | "button";
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
function parseNavigation(value: unknown): ManageNavigation | undefined {
|
|
69
|
+
if (!value || typeof value !== "object") return undefined;
|
|
70
|
+
const raw = value as Record<string, unknown>;
|
|
71
|
+
const title = clean(raw.title);
|
|
72
|
+
const subtitle = title ? clean(raw.subtitle) : "";
|
|
73
|
+
const search = raw.search === "drawer" || raw.search === "button" ? raw.search : undefined;
|
|
74
|
+
if (!title && !search) return undefined;
|
|
75
|
+
return { ...(title ? { title } : {}), ...(subtitle ? { subtitle } : {}), ...(search ? { search } : {}) };
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
/** The open action's arguments that carry [navigation] to the host: strings only, as `_nav.args` takes them. */
|
|
79
|
+
export function navigationArgs(navigation: ManageNavigation | undefined): Record<string, string> | undefined {
|
|
80
|
+
if (!navigation) return undefined;
|
|
81
|
+
return { ...(navigation.title ? { title: navigation.title } : {}), ...(navigation.subtitle ? { subtitle: navigation.subtitle } : {}),
|
|
82
|
+
...(navigation.search ? { search: navigation.search } : {}) };
|
|
55
83
|
}
|
|
56
84
|
|
|
57
85
|
export interface ManageSection {
|
|
@@ -98,6 +126,8 @@ export function parseAreas(value: unknown): ManageArea[] {
|
|
|
98
126
|
hideCreate: !(createScreenId && createLabel),
|
|
99
127
|
hideHandoff: !DASHBOARD_PATHS[area.id],
|
|
100
128
|
handoffLabel: clean(raw.handoffLabel) || `Open in Wix: ${area.title}`,
|
|
129
|
+
...(parseNavigation(raw.navigation) ? { navigation: parseNavigation(raw.navigation) } : {}),
|
|
130
|
+
...(createScreenId && createLabel && parseNavigation(raw.createNavigation) ? { createNavigation: parseNavigation(raw.createNavigation) } : {}),
|
|
101
131
|
metricText: "—",
|
|
102
132
|
statusText: "",
|
|
103
133
|
unavailable: false,
|
|
@@ -84,14 +84,17 @@ export function createCollectionQuery<Row>(source: CollectionQuerySource<Row>, p
|
|
|
84
84
|
}
|
|
85
85
|
return result;
|
|
86
86
|
};
|
|
87
|
-
|
|
87
|
+
/** [keepRows]: a search typed over the rows on screen leaves them there until its answer arrives (status stays
|
|
88
|
+
* `loading`, and nothing pages under the old answer), so the list is not blanked on each keystroke. */
|
|
89
|
+
const fetch = async (append: boolean, keepRows = false): Promise<void> => {
|
|
88
90
|
if (disposed || (append && (state.loadingMore || state.status === 'loading' || !state.nextCursor))) return;
|
|
89
91
|
const revision = append ? generation : ++generation;
|
|
90
92
|
const cursor = append ? state.nextCursor : '';
|
|
91
93
|
const criteria = copyQuery(state.criteria);
|
|
92
94
|
if (!append) loadedPages = 0;
|
|
93
95
|
state = { ...state, status: append ? 'ready' : 'loading', loadingMore: append, pageError: false, error: '',
|
|
94
|
-
...(append ? {} :
|
|
96
|
+
...(append ? {} : keepRows ? { nextCursor: '', complete: false, provisional: false }
|
|
97
|
+
: { items: [], nextCursor: '', total: undefined, metadata: undefined, complete: false, provisional: false }) };
|
|
95
98
|
emit();
|
|
96
99
|
try {
|
|
97
100
|
if (!append && source.cached) {
|
|
@@ -117,7 +120,9 @@ export function createCollectionQuery<Row>(source: CollectionQuerySource<Row>, p
|
|
|
117
120
|
clearedByError = clear || /HTTP 40[13]\b/.test(String(error));
|
|
118
121
|
if (clearedByError) lastShown = undefined;
|
|
119
122
|
if (clear) loadedPages = 0;
|
|
120
|
-
|
|
123
|
+
// The rows a typed search kept on screen while it ran were never its answer: a failed one shows none of them.
|
|
124
|
+
const drop = clear || keepRows;
|
|
125
|
+
state = { ...state, ...(drop ? { items: [], nextCursor: '', total: undefined, metadata: undefined } : {}),
|
|
121
126
|
status: append && !clear ? 'ready' : 'error', loadingMore: false, pageError: append && !clear, complete: false,
|
|
122
127
|
provisional: false, error: source.errorMessage?.(error) ?? '' };
|
|
123
128
|
}
|
|
@@ -134,9 +139,13 @@ export function createCollectionQuery<Row>(source: CollectionQuerySource<Row>, p
|
|
|
134
139
|
const count = restorePages && same ? Math.max(loadedPages, restoringPages, 1) : 1;
|
|
135
140
|
const showing = lastShown && sameCriteria(lastShown.state.criteria, next) ? lastShown : undefined;
|
|
136
141
|
restoringPages = count;
|
|
142
|
+
// Only the search text changed: the user is typing over the rows on screen, also while the last keystroke's
|
|
143
|
+
// search is still out.
|
|
144
|
+
const typing = !same && (state.status === 'ready' || state.status === 'loading')
|
|
145
|
+
&& sameCriteria({ ...state.criteria, query: '' }, { ...next, query: '' });
|
|
137
146
|
state = { ...state, criteria: next };
|
|
138
147
|
if (revalidate && showing) { revalidating = generation + 1; clearedByError = false; }
|
|
139
|
-
const pending = fetch(false);
|
|
148
|
+
const pending = fetch(false, typing);
|
|
140
149
|
const revision = generation;
|
|
141
150
|
await pending;
|
|
142
151
|
// Re-appearance revalidates every previously opened page using fresh
|
|
@@ -194,7 +194,8 @@ export function decorateCollection(name: string, def: { state: State; actions?:
|
|
|
194
194
|
noSignIn: !signInRequired,
|
|
195
195
|
errorTitle: signInRequired ? copyParam('collection.signInTitle', 'Sign in to see this') : copyParam('collection.loadErrorTitle', 'This collection could not load'),
|
|
196
196
|
errorMessage,
|
|
197
|
-
|
|
197
|
+
// A skeleton only with nothing to show: a search re-running over the rows on screen keeps them.
|
|
198
|
+
noLoading: !loading || rows.length > 0,
|
|
198
199
|
// De-dup against a domain that paints its OWN empty block (screen-kit emptyBlock is
|
|
199
200
|
// gated on the domain's top-level `noEmpty`): only one empty state ever shows.
|
|
200
201
|
noEmptySource: !sourceEmpty || s.noEmpty === false,
|