@inglorious/web 6.5.0 → 6.5.2

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/README.md CHANGED
@@ -1045,6 +1045,10 @@ api.notify("navigate", "/users/456")
1045
1045
  // Or navigate back in history
1046
1046
  api.notify("navigate", -1)
1047
1047
 
1048
+ // Go back, or to "/users" when the app was opened on this page and has
1049
+ // nothing of its own to go back to (a deep link, a fresh tab)
1050
+ api.notify("back", "/users")
1051
+
1048
1052
  // With options
1049
1053
  api.notify("navigate", {
1050
1054
  to: "/users/456",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@inglorious/web",
3
- "version": "6.5.0",
3
+ "version": "6.5.2",
4
4
  "description": "A new web framework that leverages the power of the Inglorious Store combined with the performance and simplicity of lit-html.",
5
5
  "author": "Matteo Antony Mistretta <antony.mistretta@gmail.com> (https://ingloriouscoderz.it)",
6
6
  "contributors": [
@@ -104,12 +104,12 @@
104
104
  },
105
105
  "sideEffects": false,
106
106
  "dependencies": {
107
- "@inglorious/utils": "4.0.0",
107
+ "@inglorious/utils": "5.0.0",
108
108
  "@lit-labs/ssr-client": "^1.1.8",
109
109
  "lit-html": "^3.3.3"
110
110
  },
111
111
  "peerDependencies": {
112
- "@inglorious/store": "11.0.2"
112
+ "@inglorious/store": "11.0.3"
113
113
  },
114
114
  "devDependencies": {
115
115
  "@inglorious/eslint-config": "1.1.2",
@@ -221,6 +221,27 @@ export function createHandlers(routeConfig) {
221
221
  api.notify("routeChange", historyState)
222
222
  },
223
223
 
224
+ /**
225
+ * Goes back one entry when the app has an entry of its own to go back to,
226
+ * and otherwise navigates to the fallback in place. An app opened on a deep
227
+ * link starts at the first index, where `history.back()` would leave the
228
+ * app or do nothing at all.
229
+ * @param {RouterEntity} entity - The router entity.
230
+ * @param {string|{to: string, params?: object, state?: object}} [fallback] - Where to go when there is nothing to go back to.
231
+ * @param {Api} api - The application API.
232
+ */
233
+ back(entity, fallback, api) {
234
+ if (entity.idx > FIRST_HISTORY_INDEX) {
235
+ history.back()
236
+ return
237
+ }
238
+
239
+ if (fallback == null) return
240
+
241
+ const options = typeof fallback === "string" ? { to: fallback } : fallback
242
+ api.notify(`#${entity.id}:navigate`, { ...options, replace: true })
243
+ },
244
+
224
245
  /**
225
246
  * Handles successful loading of a lazily-loaded route module.
226
247
  * Registers the loaded type in the runtime type registry via `api.setType`
package/types/router.d.ts CHANGED
@@ -38,6 +38,8 @@ export interface RouterEntity {
38
38
  query?: QueryParams
39
39
  /** The hash from the current URL. */
40
40
  hash?: string
41
+ /** The position of the current entry in the session history, counted from the entry the app started on. */
42
+ idx?: number
41
43
  /** Whether a route is currently loading asynchronously. */
42
44
  isLoading?: boolean
43
45
  /** An error that occurred during route loading. */
@@ -104,6 +106,19 @@ export interface RouterType {
104
106
  api: Api,
105
107
  ): void | Promise<void>
106
108
 
109
+ /**
110
+ * Goes back one history entry when the app pushed one, and otherwise
111
+ * navigates to the fallback, replacing the current entry.
112
+ * @param {RouterEntity} entity - The router entity.
113
+ * @param {string|Omit<NavigatePayload, "replace">} [fallback] - Where to go when there is nothing to go back to.
114
+ * @param {StoreApi} api - The store API.
115
+ */
116
+ back(
117
+ entity: RouterEntity,
118
+ fallback: string | Omit<NavigatePayload, "replace"> | undefined,
119
+ api: Api,
120
+ ): void
121
+
107
122
  /**
108
123
  * Synchronizes the router entity's state with data from a routing event,
109
124
  * typically triggered by a `popstate` event (browser back/forward).