Skip to content

Commit

Permalink
Merge pull request #197 from Telegram-Mini-Apps/feature/stable-router…
Browse files Browse the repository at this point in the history
…-integration

Feature/stable router integration
  • Loading branch information
heyqbnk authored Nov 30, 2023
2 parents 244440f + 04d2b18 commit 194669b
Show file tree
Hide file tree
Showing 8 changed files with 212 additions and 21 deletions.
5 changes: 5 additions & 0 deletions .changeset/thin-trees-decide.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@tma.js/solid-router-integration": major
---

The first package major version
5 changes: 3 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -77,13 +77,14 @@ the [documentation](https://docs.telegram-mini-apps.com/platform/launch-paramete

### [`@tma.js/solid-router-integration`](https://docs.telegram-mini-apps.com/packages/typescript/tma-js-solid-router-integration)

[solid-router-integration-npm-badge]: https://img.shields.io/npm/v/@tma.js/solid-router-integration?logo=npm
[solid-router-integration-npm-badge]: https://img.shields.io/npm/v/@tma.js/solid-router-integration?logo=npm

[![solid-router-integration-npm-badge]](https://npmjs.com/package/@tma.js/solid-router-integration)
![Size](https://img.shields.io/bundlephobia/minzip/@tma.js/solid-router-integration)
[![code-badge]](https://github.com/Telegram-Mini-Apps/tma.js/tree/master/packages/solid-router-integration)

[@solidjs/router](https://www.npmjs.com/package/@solidjs/router) integration for navigation.
Telegram Mini Apps [Navigator](http://localhost:5173/packages/typescript/tma-js-sdk/navigation)
integration for [@solidjs/router](https://www.npmjs.com/package/@solidjs/router).

## Why not Telegram SDK

Expand Down
10 changes: 7 additions & 3 deletions apps/docs/.vitepress/packages.ts
Original file line number Diff line number Diff line change
Expand Up @@ -42,15 +42,15 @@ export const packagesSidebar = {
},
{
text: 'InitData',
link: prefixed('/typescript/tma-js-sdk/init-data/init-data')
link: prefixed('/typescript/tma-js-sdk/init-data/init-data'),
},
{
text: 'Chat',
link: prefixed('/typescript/tma-js-sdk/init-data/chat')
link: prefixed('/typescript/tma-js-sdk/init-data/chat'),
},
{
text: 'User',
link: prefixed('/typescript/tma-js-sdk/init-data/user')
link: prefixed('/typescript/tma-js-sdk/init-data/user'),
},
],
},
Expand Down Expand Up @@ -124,6 +124,10 @@ export const packagesSidebar = {
},
{ text: '@tma.js/sdk-react', link: prefixed('/typescript/tma-js-sdk-react') },
{ text: '@tma.js/sdk-solid', link: prefixed('/typescript/tma-js-sdk-solid') },
{
text: '@tma.js/solid-router-integration',
link: prefixed('/typescript/tma-js-solid-router-integration'),
},
],
},
{
Expand Down
14 changes: 9 additions & 5 deletions apps/docs/packages/typescript/tma-js-sdk-react.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,15 @@ outline: [2, 3]

# @tma.js/sdk-react

[npm-link]: https://npmjs.com/package/@tma.js/sdk-react

[npm-shield]: https://img.shields.io/npm/v/@tma.js/sdk-react?logo=npm

![[npm-link]][npm-shield]
<p style="display: inline-flex; gap: 8px">
<a href="https://npmjs.com/package/@tma.js/sdk-react">
<img src="https://img.shields.io/npm/v/@tma.js/sdk-react?logo=npm"/>
</a>
<img src="https://img.shields.io/bundlephobia/minzip/@tma.js/sdk-react"/>
<a href="https://github.com/Telegram-Mini-Apps/tma.js/tree/master/packages/sdk-react">
<img src="https://img.shields.io/badge/source-black?logo=github"/>
</a>
</p>

React JS bindings for [client SDK](tma-js-sdk/about.md). Includes hooks, components and utilities
for comfortable usage of React JS on the Telegram Mini Apps platform.
Expand Down
19 changes: 14 additions & 5 deletions apps/docs/packages/typescript/tma-js-sdk-solid.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,15 @@ outline: [2, 3]

# @tma.js/sdk-solid

[npm-link]: https://npmjs.com/package/@tma.js/sdk-solid

[npm-shield]: https://img.shields.io/npm/v/@tma.js/sdk-solid?logo=npm

![[npm-link]][npm-shield]
<p style="display: inline-flex; gap: 8px">
<a href="https://npmjs.com/package/@tma.js/sdk-solid">
<img src="https://img.shields.io/npm/v/@tma.js/sdk-solid?logo=npm"/>
</a>
<img src="https://img.shields.io/bundlephobia/minzip/@tma.js/sdk-solid"/>
<a href="https://github.com/Telegram-Mini-Apps/tma.js/tree/master/packages/sdk-solid">
<img src="https://img.shields.io/badge/source-black?logo=github"/>
</a>
</p>

Solid JS bindings for [client SDK](tma-js-sdk/about.md). Includes hooks, components and utilities
for comfortable usage of Solid JS on the Telegram Mini Apps platform.
Expand Down Expand Up @@ -336,3 +340,8 @@ their properties change.
Using these hooks with an uninitialized SDK will result in throwing a corresponding error.
:::
## Template
We have already created a [template](https://github.com/Telegram-Mini-Apps/solidjs-template) for
Solid JS that utilizes the current package, so you can use it.
14 changes: 9 additions & 5 deletions apps/docs/packages/typescript/tma-js-sdk/about.md
Original file line number Diff line number Diff line change
@@ -1,10 +1,14 @@
# @tma.js/sdk

[npm-link]: https://npmjs.com/package/@tma.js/sdk

[npm-shield]: https://img.shields.io/npm/v/@tma.js/sdk?logo=npm

![[npm-link]][npm-shield]
<p style="display: inline-flex; gap: 8px">
<a href="https://npmjs.com/package/@tma.js/sdk">
<img src="https://img.shields.io/npm/v/@tma.js/sdk?logo=npm"/>
</a>
<img src="https://img.shields.io/bundlephobia/minzip/@tma.js/sdk"/>
<a href="https://github.com/Telegram-Mini-Apps/tma.js/tree/master/packages/sdk">
<img src="https://img.shields.io/badge/source-black?logo=github"/>
</a>
</p>

Made from scratch TypeScript library for seamless communication with Telegram Mini Apps
functionality.
Expand Down
163 changes: 163 additions & 0 deletions apps/docs/packages/typescript/tma-js-solid-router-integration.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,163 @@
# @tma.js/solid-router-integration

<p style="display: inline-flex; gap: 8px">
<a href="https://npmjs.com/package/@tma.js/solid-router-integration">
<img src="https://img.shields.io/npm/v/@tma.js/solid-router-integration?logo=npm"/>
</a>
<img src="https://img.shields.io/bundlephobia/minzip/@tma.js/solid-router-integration"/>
<a href="https://github.com/Telegram-Mini-Apps/tma.js/tree/master/packages/solid-router-integration">
<img src="https://img.shields.io/badge/source-black?logo=github"/>
</a>
</p>

Telegram Mini Apps [Navigator](tma-js-sdk/navigation.md) integration
for [@solidjs/router](https://www.npmjs.com/package/@solidjs/router).

## Installation

::: code-group

```bash [pnpm]
pnpm i @tma.js/solid-router-integration
```

```bash [npm]
npm i @tma.js/solid-router-integration
```

```bash [yarn]
yarn add @tma.js/solid-router-integration
```

:::

## Usage

At the moment, this package provides the only 1 function, which creates the integration for
`@solidjs/router` Router - `createIntegration`.

Here is how it could be used:

```jsx
import {
Routes,
Route,
Navigate,
Router,
} from '@solidjs/router';
import { HashNavigator } from '@tma.js/sdk';
import { createIntegration } from '@tma.js/solid-router-integration';

import { IndexPage } from './IndexPage.js';

function App() {
// We should create navigator to pass it to integration creation.
const navigator = new HashNavigator([{}], 0);

// Then, to allow this navigator update current browser history,
// we should attach it. Otherwise, it will work in memory mode.
void navigator.attach();

return (
<Router source={createIntegration(() => navigator)}>
<Routes>
<Route path={'/'} component={IndexPage}/>
<Route path={'*'} element={<Navigate href={'/'}/>}/>
</Routes>
</Router>
);
}
```

And also a bit more complex example with navigation state restoration:

::: code-group

```jsx [App.tsx]
import {
Routes,
Route,
Navigate,
Router,
} from '@solidjs/router';
import { HashNavigator } from '@tma.js/sdk';

import { createNavigator } from './createNavigator.js';
import { IndexPage } from './IndexPage.js';

function App() {
// We should create navigator to pass it to integration creation.
const navigator = createNavigator();

// Then, to allow this navigator update current browser history,
// we should attach it. Otherwise, it will work in memory mode.
void navigator.attach();

return (
<Router source={createIntegration(() => navigator)}>
<Routes>
<Route path={'/'} component={IndexPage}/>
<Route path={'*'} element={<Navigate href={'/'}/>}/>
</Routes>
</Router>
);
}
```

```typescript [createNavigator.ts]
import {
retrieveLaunchData,
HashNavigator,
type HashNavigatorOptions,
} from '@tma.js/sdk';

export function createNavigator(): HashNavigator {
let navigator: HashNavigator | undefined;
const navigatorOptions: HashNavigatorOptions = {
debug: true,
};

// If page was reloaded, we assume that navigator had to previously save
// its state in the session storage.
if (retrieveLaunchData().isPageReload) {
const stateRaw = sessionStorage.getItem('hash-navigator-state');
if (stateRaw) {
try {
const { cursor, entries } = JSON.parse(stateRaw);
navigator = new HashNavigator(entries, cursor, navigatorOptions);
} catch (e) {
console.error('Unable to restore hash navigator state.', e);
}
}
}

// In case, we could not restore its state, or it is the fresh start, we
// can create empty navigator.
if (!navigator) {
navigator = new HashNavigator([{}], 0, navigatorOptions);
}

const saveState = (nav: HashNavigator) => {
sessionStorage.setItem('hash-navigator-state', JSON.stringify({
cursor: nav.cursor,
entries: nav.getEntries(),
}));
}

// Whenever navigator changes its state, we save it in the session storage.
navigator.on('change', ({ navigator: nav }) => saveState(nav));

// Save initial state to make sure nothing will break when page will
// be reloaded.
saveState(navigator);

return navigator;
}
```

:::

## Template

We have already created a [template](https://github.com/Telegram-Mini-Apps/solidjs-template) for
Solid JS that utilizes the current package, so you can use it.
3 changes: 2 additions & 1 deletion packages/solid-router-integration/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -19,4 +19,5 @@
[![docs-badge]][solid-router-integration-docs-link]
[![code-badge]][solid-router-integration-code-link]

[@solidjs/router](https://www.npmjs.com/package/@solidjs/router) integration for navigation.
Telegram Mini Apps [Navigator](http://localhost:5173/packages/typescript/tma-js-sdk/navigation)
integration for [@solidjs/router](https://www.npmjs.com/package/@solidjs/router).

0 comments on commit 194669b

Please sign in to comment.