From 0f39a95efb4e5aa53d5bccf6b3c8c91757b724ad Mon Sep 17 00:00:00 2001 From: alina sireneva Date: Wed, 15 Jan 2025 06:48:23 +0300 Subject: [PATCH] about tab --- packages/repl/package.json | 1 + packages/repl/src/components/Updater.tsx | 4 +- .../repl/src/components/settings/AboutTab.tsx | 60 +++++++++++++++++++ .../repl/src/components/settings/Settings.tsx | 5 +- packages/repl/src/store/versions.ts | 3 + packages/worker/src/worker/vfs.ts | 7 ++- pnpm-lock.yaml | 3 + 7 files changed, 78 insertions(+), 5 deletions(-) create mode 100644 packages/repl/src/components/settings/AboutTab.tsx create mode 100644 packages/repl/src/store/versions.ts diff --git a/packages/repl/package.json b/packages/repl/package.json index 9c80a42..ab5eb75 100644 --- a/packages/repl/package.json +++ b/packages/repl/package.json @@ -31,6 +31,7 @@ "nanoid": "^5.0.9", "nanostores": "^0.11.3", "onigasm": "^2.2.5", + "semver": "^7.6.3", "solid-icons": "^1.1.0", "solid-js": "^1.9.4", "solid-sonner": "^0.2.8", diff --git a/packages/repl/src/components/Updater.tsx b/packages/repl/src/components/Updater.tsx index 5df0852..e7ca354 100644 --- a/packages/repl/src/components/Updater.tsx +++ b/packages/repl/src/components/Updater.tsx @@ -2,6 +2,7 @@ import { filesize } from 'filesize' import { workerInvoke, workerOn } from 'mtcute-repl-worker/client' import { createSignal, onMount } from 'solid-js' import { Spinner } from '../lib/components/ui/spinner.tsx' +import { $versions } from '../store/versions.ts' export interface UpdaterProps { onComplete: () => void @@ -14,7 +15,8 @@ export function Updater(props: UpdaterProps) { async function runUpdater() { setStep('Checking for updates...') - const updates = await workerInvoke('vfs', 'checkForUpdates') + const { updates, latestVersions } = await workerInvoke('vfs', 'checkForUpdates') + $versions.set(latestVersions) if (Object.keys(updates).length === 0) { props.onComplete() diff --git a/packages/repl/src/components/settings/AboutTab.tsx b/packages/repl/src/components/settings/AboutTab.tsx new file mode 100644 index 0000000..aeb7501 --- /dev/null +++ b/packages/repl/src/components/settings/AboutTab.tsx @@ -0,0 +1,60 @@ +import compare from 'semver/functions/compare' +import { SiGithub } from 'solid-icons/si' +import { Button } from '../../lib/components/ui/button.tsx' +import { $versions } from '../../store/versions.ts' + +export function AboutTab() { + const maxVersion = () => { + let maxVersion = '0.0.0' + for (const [pkg, version] of Object.entries($versions.get())) { + if (pkg === '@mtcute/tl') continue + if (compare(version, maxVersion) > 0) { + maxVersion = version + } + } + + return maxVersion + } + + return ( +
+ mtcute logo +
+

+ mtcute playground +

+

+ (running mtcute v + {maxVersion()} + , + layer + {' '} + {$versions.get()['@mtcute/tl'].split('.')[0]} + ) +

+
+
+ An interactive playground and REPL for mtcute +
+ (a Telegram client library), right in your browser! +
+

+ +

+
+ ) +} diff --git a/packages/repl/src/components/settings/Settings.tsx b/packages/repl/src/components/settings/Settings.tsx index 1c9b685..1387913 100644 --- a/packages/repl/src/components/settings/Settings.tsx +++ b/packages/repl/src/components/settings/Settings.tsx @@ -7,6 +7,7 @@ import { DialogContent, } from '../../lib/components/ui/dialog.tsx' import { cn } from '../../lib/utils.ts' +import { AboutTab } from './AboutTab.tsx' import { AccountsTab } from './AccountsTab.tsx' export type SettingsTab = @@ -31,13 +32,13 @@ const tabs: Array = [ id: 'libraries', title: 'Libraries', icon: LucideLibrary, - content: () =>
asd
, + content: () =>
Not implemented yet...
, }, { id: 'about', title: 'About', icon: LucideCode, - content: () =>
asd
, + content: AboutTab, }, ] diff --git a/packages/repl/src/store/versions.ts b/packages/repl/src/store/versions.ts new file mode 100644 index 0000000..277f1cd --- /dev/null +++ b/packages/repl/src/store/versions.ts @@ -0,0 +1,3 @@ +import { atom } from 'nanostores' + +export const $versions = atom>({}) diff --git a/packages/worker/src/worker/vfs.ts b/packages/worker/src/worker/vfs.ts index c50a8a4..5108e54 100644 --- a/packages/worker/src/worker/vfs.ts +++ b/packages/worker/src/worker/vfs.ts @@ -13,11 +13,14 @@ async function getVfs() { } export class ReplWorkerVfs { - async checkForUpdates(): Promise> { + async checkForUpdates() { const latestVersions = await getLatestVersions() const versions = await getPackagesToDownload(latestVersions, await getVfs()) - return versions + return { + updates: versions, + latestVersions, + } } async downloadPackages(packages: Record) { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 242581e..66c1264 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -119,6 +119,9 @@ importers: onigasm: specifier: ^2.2.5 version: 2.2.5 + semver: + specifier: ^7.6.3 + version: 7.6.3 solid-icons: specifier: ^1.1.0 version: 1.1.0(solid-js@1.9.4)