summaryrefslogtreecommitdiff
path: root/node_modules/@jet-app/app-store/tmp/src/common/refresh/page-refresh-controller.js
diff options
context:
space:
mode:
authorrxliuli <rxliuli@gmail.com>2025-11-04 05:03:50 +0800
committerrxliuli <rxliuli@gmail.com>2025-11-04 05:03:50 +0800
commitbce557cc2dc767628bed6aac87301a1be7c5431b (patch)
treeb51a051228d01fe3306cd7626d4a96768aadb944 /node_modules/@jet-app/app-store/tmp/src/common/refresh/page-refresh-controller.js
init commit
Diffstat (limited to 'node_modules/@jet-app/app-store/tmp/src/common/refresh/page-refresh-controller.js')
-rw-r--r--node_modules/@jet-app/app-store/tmp/src/common/refresh/page-refresh-controller.js123
1 files changed, 123 insertions, 0 deletions
diff --git a/node_modules/@jet-app/app-store/tmp/src/common/refresh/page-refresh-controller.js b/node_modules/@jet-app/app-store/tmp/src/common/refresh/page-refresh-controller.js
new file mode 100644
index 0000000..a7c51d7
--- /dev/null
+++ b/node_modules/@jet-app/app-store/tmp/src/common/refresh/page-refresh-controller.js
@@ -0,0 +1,123 @@
+import * as models from "../../api/models";
+import * as serverData from "../../foundation/json-parsing/server-data";
+import { ResponseMetadata } from "../../foundation/network/network";
+/**
+ * Creates a new `PageRefreshController` with the provided information.
+ * @param response the response from the network request.
+ * @param refreshWhileVisibleForNextPreferredContentRefreshDate indicates that the page supports refreshing while visible, but only where the nextPreferredContentRefreshDate is used as the refresh date.
+ * @returns a `PageRefreshController`.
+ */
+export function newPageRefreshControllerFromResponse(response, refreshWhileVisibleForNextPreferredContentRefreshDate = false) {
+ return {
+ timeToLive: timeToLiveFromResponse(response),
+ nextPreferredContentRefreshDate: null,
+ refreshWhileVisibleForNextPreferredContentRefreshDate: refreshWhileVisibleForNextPreferredContentRefreshDate,
+ };
+}
+/**
+ * Creates a new `PageRefreshController`.
+ * This is primarily used for shelf hydration where we don't have a full page response to use for TTL data.
+ * @returns an empty `PageRefreshController`.
+ */
+export function newPageRefreshController() {
+ return {
+ timeToLive: null,
+ nextPreferredContentRefreshDate: null,
+ refreshWhileVisibleForNextPreferredContentRefreshDate: false,
+ };
+}
+/**
+ * Adds a preferredContentRefreshDate to the refreshController if it's sooner than the currently known nextPreferredContentRefreshDate.
+ * Provided date must be in the future.
+ * @param nextPreferredContentRefreshDate the new date to check and add.
+ * @param refreshController the refreshController to add the new date to
+ */
+export function addNextPreferredContentRefreshDate(newPreferredContentRefreshDate, refreshController) {
+ if (serverData.isNull(refreshController) || serverData.isNull(newPreferredContentRefreshDate)) {
+ return;
+ }
+ if ((serverData.isNull(refreshController.nextPreferredContentRefreshDate) ||
+ newPreferredContentRefreshDate.getTime() < refreshController.nextPreferredContentRefreshDate.getTime()) &&
+ newPreferredContentRefreshDate.getTime() > new Date().getTime()) {
+ refreshController.nextPreferredContentRefreshDate = newPreferredContentRefreshDate;
+ }
+}
+/**
+ * Generates a `PageRefreshPolicy` that can be attached to a page to define the refresh logic of that page.
+ * @param refreshController the object that has collected data to create a suitable refresh policy
+ * @returns the refresh policy, if a content TTL or nextPreferredContentRefreshDate has been provided.
+ */
+export function pageRefreshPolicyForController(objectGraph, refreshController) {
+ if (!isAutomaticPageRefreshEnabled(objectGraph)) {
+ return null;
+ }
+ if (serverData.isNull(refreshController)) {
+ return null;
+ }
+ let date;
+ let usingNextPreferredContentRefreshDate = false;
+ if (serverData.isDefinedNonNull(refreshController.timeToLive) &&
+ serverData.isDefinedNonNull(refreshController.nextPreferredContentRefreshDate)) {
+ const timeToLiveDate = dateByAddingTimeToNow(refreshController.timeToLive);
+ if (timeToLiveDate.getTime() < refreshController.nextPreferredContentRefreshDate.getTime() &&
+ timeToLiveDate.getTime() > new Date().getTime()) {
+ date = timeToLiveDate;
+ }
+ else {
+ date = refreshController.nextPreferredContentRefreshDate;
+ usingNextPreferredContentRefreshDate = true;
+ }
+ }
+ else if (serverData.isDefinedNonNull(refreshController.timeToLive)) {
+ date = dateByAddingTimeToNow(refreshController.timeToLive);
+ }
+ else if (serverData.isDefinedNonNull(refreshController.nextPreferredContentRefreshDate)) {
+ date = refreshController.nextPreferredContentRefreshDate;
+ usingNextPreferredContentRefreshDate = true;
+ }
+ else {
+ return null;
+ }
+ if (date.getTime() <= new Date().getTime()) {
+ return null;
+ }
+ const refreshWhileVisible = usingNextPreferredContentRefreshDate && refreshController.refreshWhileVisibleForNextPreferredContentRefreshDate;
+ return new models.PageRefreshPolicy("timeToLive", 0.0, null, date, refreshWhileVisible);
+}
+/**
+ * Returns the nextPreferredContentRefreshDate for the provided refresh controller.
+ * Primarily used when fetching individual shelves so we can attach a refresh date, rather
+ * than a `PageRefreshPolicy`, which sits up at a page level.
+ * @param refreshController the object that has collected refresh data.
+ * @returns the nextPreferredContentRefreshDate, if it has been provided.
+ */
+export function nextPreferredContentRefreshDateForController(refreshController) {
+ return refreshController === null || refreshController === void 0 ? void 0 : refreshController.nextPreferredContentRefreshDate;
+}
+/**
+ * Returns the time to live value from the response data.
+ *
+ * @param dataContainer The response data container from which to extract the content TTL
+ * @returns a content TTL, if any, or null.
+ */
+function timeToLiveFromResponse(response) {
+ return response[ResponseMetadata.contentMaxAge];
+}
+/**
+ * Returns a new date, adjusted by the number of seconds.
+ *
+ * @param seconds The number of seconds to add to now
+ * @returns The adjusted Date
+ */
+function dateByAddingTimeToNow(seconds) {
+ const date = new Date();
+ date.setSeconds(date.getSeconds() + seconds);
+ return date;
+}
+/**
+ * Returns whether refreshing pages automatically is enabled in the bag.
+ */
+function isAutomaticPageRefreshEnabled(objectGraph) {
+ return objectGraph.bag.enableAutomaticPageRefresh;
+}
+//# sourceMappingURL=page-refresh-controller.js.map \ No newline at end of file