mirror of
https://github.com/ivabus/gui
synced 2025-04-24 22:47:14 +03:00

* #213 web preview and cleanup native api integration * remove old tauri build implementation * fix git path --------- Co-authored-by: neil <neil@neils-MacBook-Pro.local>
376 lines
10 KiB
TypeScript
376 lines
10 KiB
TypeScript
/**
|
|
* primarily used to make this desktop app work in the website preview setting in the CI/CD
|
|
* may contain fake/mock data
|
|
*
|
|
* TODO:
|
|
* * make cors work with api.tea.xyz/v1
|
|
*/
|
|
import type { Package, Review, AirtablePost, Bottle } from "@tea/ui/types";
|
|
import type { GUIPackage, Course, Category, Session } from "./types";
|
|
import { PackageStates } from "./types";
|
|
import { loremIpsum } from "lorem-ipsum";
|
|
import _ from "lodash";
|
|
|
|
// import { getSession } from '$libs/stores/auth';
|
|
import * as v1Client from "$libs/v1-client";
|
|
|
|
const packages: Package[] = [
|
|
{
|
|
slug: "mesonbuild_com",
|
|
homepage: "https://mesonbuild.com",
|
|
name: "mesonbuild.com",
|
|
version: "0.63.3",
|
|
last_modified: "2022-10-06T15:45:08.000Z",
|
|
full_name: "mesonbuild.com",
|
|
dl_count: 270745,
|
|
thumb_image_name: "mesonbuild_com_option 1.jpg ",
|
|
maintainer: "",
|
|
desc: "Fast and user friendly build system",
|
|
thumb_image_url: "https://tea.xyz/Images/packages/mesonbuild_com.jpg",
|
|
installs: 0,
|
|
categories: ["foundation_essentials"]
|
|
},
|
|
{
|
|
slug: "pixman_org",
|
|
homepage: "http://www.pixman.org/",
|
|
maintainer: "freedesktop",
|
|
name: "pixman.org",
|
|
version: "0.40.0",
|
|
last_modified: "2022-09-26T19:37:47.000Z",
|
|
full_name: "pixman.org",
|
|
dl_count: 0,
|
|
thumb_image_name: "pixman_org_option 1.jpg ",
|
|
desc: "Pixman is a library that provides low-level pixel manipulation features such as image compositing and trapezoid rasterization.",
|
|
thumb_image_url: "https://tea.xyz/Images/packages/pixman_org.jpg",
|
|
installs: 0,
|
|
categories: ["foundation_essentials"]
|
|
},
|
|
{
|
|
slug: "freedesktop_org_pkg_config",
|
|
homepage: "https://freedesktop.org",
|
|
maintainer: "freedesktop.org",
|
|
name: "pkg-config",
|
|
version: "0.29.2",
|
|
last_modified: "2022-10-20T01:32:15.000Z",
|
|
full_name: "freedesktop.org/pkg-config",
|
|
dl_count: 2661501,
|
|
thumb_image_name: "freedecktop_org_pkg_config option 1.jpg ",
|
|
desc: "Manage compile and link flags for libraries",
|
|
thumb_image_url: "https://tea.xyz/Images/packages/freedesktop_org_pkg_config.jpg",
|
|
installs: 0,
|
|
categories: ["foundation_essentials"]
|
|
},
|
|
{
|
|
slug: "gnu_org_gettext",
|
|
homepage: "https://gnu.org",
|
|
maintainer: "gnu.org",
|
|
name: "gettext",
|
|
version: "0.21.1",
|
|
last_modified: "2022-10-20T01:23:46.000Z",
|
|
full_name: "gnu.org/gettext",
|
|
dl_count: 3715970,
|
|
thumb_image_name: "gnu_org_gettext_option 1.jpg ",
|
|
desc: "GNU internationalization (i18n) and localization (l10n) library",
|
|
thumb_image_url: "https://tea.xyz/Images/packages/gnu_org_gettext.jpg",
|
|
installs: 0,
|
|
categories: ["foundation_essentials"]
|
|
},
|
|
{
|
|
slug: "ipfs_tech",
|
|
homepage: "https://ipfs.tech",
|
|
name: "ipfs.tech",
|
|
version: "0.16.0",
|
|
last_modified: "2022-10-19T21:36:52.000Z",
|
|
full_name: "ipfs.tech",
|
|
dl_count: 14457,
|
|
thumb_image_name: "ipfs_tech_option 2.jpg ",
|
|
maintainer: "",
|
|
desc: "Peer-to-peer hypermedia protocol",
|
|
thumb_image_url: "https://tea.xyz/Images/packages/ipfs_tech.jpg",
|
|
installs: 0,
|
|
categories: ["foundation_essentials"]
|
|
},
|
|
{
|
|
slug: "nixos_org_patchelf",
|
|
homepage: "https://nixos.org",
|
|
maintainer: "nixos.org",
|
|
name: "patchelf",
|
|
version: "0.15.0",
|
|
last_modified: "2022-09-27T04:50:44.000Z",
|
|
full_name: "nixos.org/patchelf",
|
|
dl_count: 0,
|
|
thumb_image_name: "nixos_org_patchelf_option 1.jpg ",
|
|
desc: "PatchELF is a simple utility for modifying existing ELF executables and libraries.",
|
|
thumb_image_url: "https://tea.xyz/Images/packages/nixos_org_patchelf.jpg",
|
|
installs: 0,
|
|
categories: ["top_packages", "foundation_essentials"]
|
|
},
|
|
{
|
|
slug: "tea_xyz",
|
|
homepage: "https://tea.xyz",
|
|
maintainer: "tea.xyz",
|
|
name: "tea.xyz",
|
|
version: "0.8.6",
|
|
last_modified: "2022-10-19T19:13:51.000Z",
|
|
full_name: "tea.xyz",
|
|
dl_count: 0,
|
|
thumb_image_name: "tea_xyz_option 2.jpg ",
|
|
desc: "Website of tea.xyz",
|
|
thumb_image_url: "https://tea.xyz/Images/packages/tea_xyz.jpg",
|
|
installs: 0,
|
|
categories: ["top_packages", "foundation_essentials"]
|
|
},
|
|
{
|
|
slug: "charm_sh_gum",
|
|
homepage: "https://charm.sh",
|
|
maintainer: "charm.sh",
|
|
name: "gum",
|
|
version: "0.8.0",
|
|
last_modified: "2022-10-21T02:15:16.000Z",
|
|
full_name: "charm.sh/gum",
|
|
dl_count: 0,
|
|
thumb_image_name: "charm_sh_gum.jpg ",
|
|
desc: "",
|
|
thumb_image_url: "https://tea.xyz/Images/packages/charm_sh_gum.jpg",
|
|
installs: 0,
|
|
categories: ["top_packages", "foundation_essentials"]
|
|
},
|
|
{
|
|
slug: "pyyaml_org",
|
|
homepage: "https://pyyaml.org",
|
|
name: "pyyaml.org",
|
|
version: "0.2.5",
|
|
last_modified: "2022-10-03T15:35:14.000Z",
|
|
full_name: "pyyaml.org",
|
|
dl_count: 107505,
|
|
thumb_image_name: "pyyaml_org_option 1.jpg ",
|
|
maintainer: "",
|
|
desc: "YAML framework for Python",
|
|
thumb_image_url: "https://tea.xyz/Images/packages/pyyaml_org.jpg",
|
|
installs: 0,
|
|
categories: ["top_packages", "foundation_essentials"]
|
|
},
|
|
{
|
|
slug: "tea_xyz_gx_cc",
|
|
homepage: "https://tea.xyz",
|
|
maintainer: "tea.xyz",
|
|
name: "cc",
|
|
version: "0.1.0",
|
|
last_modified: "2022-10-19T16:47:44.000Z",
|
|
full_name: "tea.xyz/gx/cc",
|
|
dl_count: 0,
|
|
thumb_image_name: "tea_xyz_gx.jpg ",
|
|
desc: "",
|
|
thumb_image_url: "https://tea.xyz/Images/packages/tea_xyz_gx_cc.jpg",
|
|
installs: 0,
|
|
categories: ["top_packages", "foundation_essentials"]
|
|
}
|
|
];
|
|
|
|
export async function getPackages(): Promise<GUIPackage[]> {
|
|
return packages.map((pkg) => {
|
|
return {
|
|
...pkg,
|
|
state: PackageStates.AVAILABLE
|
|
};
|
|
});
|
|
}
|
|
|
|
export async function getFeaturedPackages(): Promise<Package[]> {
|
|
await delay(2000);
|
|
return packages.slice(0, 4);
|
|
}
|
|
|
|
export async function getPackageReviews(full_name: string): Promise<Review[]> {
|
|
console.log(`generating reviews for ${full_name}`);
|
|
|
|
const reviewCount = _.random(9, 21);
|
|
const reviews: Review[] = [];
|
|
|
|
for (let i = 0; i < reviewCount; i++) {
|
|
const title = loremIpsum({
|
|
count: _.random(2, 5),
|
|
format: "plain",
|
|
paragraphLowerBound: 3,
|
|
paragraphUpperBound: 7,
|
|
random: Math.random,
|
|
sentenceLowerBound: 5,
|
|
sentenceUpperBound: 15,
|
|
units: "words"
|
|
});
|
|
const comment = loremIpsum({
|
|
count: 2,
|
|
format: "plain",
|
|
paragraphLowerBound: 3,
|
|
paragraphUpperBound: 7,
|
|
random: Math.random,
|
|
sentenceLowerBound: 5,
|
|
sentenceUpperBound: 15,
|
|
units: "sentences"
|
|
});
|
|
const rating = _.random(0, 5);
|
|
reviews.push({
|
|
title,
|
|
comment,
|
|
rating
|
|
});
|
|
}
|
|
|
|
await delay(2000);
|
|
return reviews;
|
|
}
|
|
|
|
export async function installPackage(full_name: string) {
|
|
console.log("installing: ", full_name);
|
|
await delay(10000);
|
|
}
|
|
|
|
function delay(ms: number) {
|
|
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
}
|
|
|
|
export async function getFeaturedCourses(): Promise<Course[]> {
|
|
const mockCourses: Course[] = [
|
|
{
|
|
title: "Developing With Tea",
|
|
sub_title: "by Mxcl",
|
|
link: "#",
|
|
banner_image_url: "https://tea.xyz/Images/packages/mesonbuild_com.jpg"
|
|
},
|
|
{
|
|
title: "Brewing Tea",
|
|
sub_title: "by Mxcl",
|
|
link: "#",
|
|
banner_image_url: "https://tea.xyz/Images/packages/tea_xyz_gx_cc.jpg"
|
|
},
|
|
{
|
|
title: "Harvesting Tea",
|
|
sub_title: "by Mxcl",
|
|
link: "#",
|
|
banner_image_url: "https://tea.xyz/Images/packages/ipfs_tech.jpg"
|
|
}
|
|
];
|
|
|
|
return mockCourses;
|
|
}
|
|
|
|
export async function getTopPackages(): Promise<GUIPackage[]> {
|
|
await delay(500);
|
|
return packages.slice(0, 9).map((pkg) => {
|
|
return {
|
|
...pkg,
|
|
state: PackageStates.AVAILABLE
|
|
};
|
|
});
|
|
}
|
|
|
|
export async function getAllPosts(type: string): Promise<AirtablePost[]> {
|
|
console.log("filter by type:", type);
|
|
const posts: AirtablePost[] = [
|
|
{
|
|
airtable_record_id: "a",
|
|
link: "https://google.com",
|
|
title: "Tea Inc releases game changing api!",
|
|
sub_title: "lorem ipsum dolor sit amet",
|
|
short_description: "lorem ipsum dolor sit amet",
|
|
thumb_image_url: "/images/bored-ape.png",
|
|
thumb_image_name: "borred-api.png",
|
|
created_at: new Date(),
|
|
updated_at: new Date(),
|
|
published_at: new Date(),
|
|
tags: ["news"]
|
|
},
|
|
{
|
|
airtable_record_id: "b",
|
|
link: "https://google.com",
|
|
title: "Bored Ape not bored anymore",
|
|
sub_title: "lorem ipsum dolor sit amet",
|
|
short_description: "lorem ipsum dolor sit amet",
|
|
thumb_image_url: "/images/bored-ape.png",
|
|
thumb_image_name: "borred-api.png",
|
|
created_at: new Date(),
|
|
updated_at: new Date(),
|
|
published_at: new Date(),
|
|
tags: ["news"]
|
|
},
|
|
{
|
|
airtable_record_id: "c",
|
|
link: "https://google.com",
|
|
title: "Markdown can be executed! hoohah!",
|
|
sub_title: "lorem ipsum dolor sit amet",
|
|
short_description: "lorem ipsum dolor sit amet",
|
|
thumb_image_url: "/images/bored-ape.png",
|
|
thumb_image_name: "borred-api.png",
|
|
created_at: new Date(),
|
|
updated_at: new Date(),
|
|
published_at: new Date(),
|
|
tags: ["news"]
|
|
}
|
|
];
|
|
|
|
return posts;
|
|
}
|
|
|
|
export async function getCategorizedPackages(): Promise<Category[]> {
|
|
const mockPackages = packages.slice(0, 9).map((pkg) => ({
|
|
...pkg,
|
|
state: PackageStates.AVAILABLE
|
|
}));
|
|
return [
|
|
{
|
|
label: "framework essentials",
|
|
cta_label: "View all essentials >",
|
|
packages: mockPackages
|
|
},
|
|
{
|
|
label: "star-struck heavyweights",
|
|
cta_label: "View all star-strucks >",
|
|
packages: mockPackages
|
|
},
|
|
{
|
|
label: "simply delightful",
|
|
cta_label: "View all delightful packages >",
|
|
packages: mockPackages
|
|
}
|
|
];
|
|
}
|
|
|
|
export async function getDeviceAuth(deviceId: string): Promise<any> {
|
|
const data = await v1Client.get<any>(`/auth/device/${deviceId}`);
|
|
return data;
|
|
}
|
|
|
|
export async function getPackageBottles(name: string): Promise<Bottle[]> {
|
|
return [
|
|
{ name, platform: "darwin", arch: "aarch64", version: "3.39.4", bytes: 123456 },
|
|
{ name, platform: "darwin", arch: "aarch64", version: "3.40.0", bytes: 123456 },
|
|
{ name, platform: "darwin", arch: "x86-64", version: "3.39.4", bytes: 123456 },
|
|
{ name, platform: "darwin", arch: "x86-64", version: "3.40.0", bytes: 123456 },
|
|
{ name, platform: "linux", arch: "aarch64", version: "3.39.4", bytes: 123456 },
|
|
{ name, platform: "linux", arch: "aarch64", version: "3.40.0", bytes: 123456 },
|
|
{ name, platform: "linux", arch: "x86-64", version: "3.39.4", bytes: 123456 },
|
|
{ name, platform: "linux", arch: "x86-64", version: "3.40.0", bytes: 123456 }
|
|
];
|
|
}
|
|
|
|
export async function getPackage(packageName: string): Promise<Partial<Package>> {
|
|
return packages.find((pkg) => pkg.full_name === packageName) || packages[0];
|
|
}
|
|
|
|
export async function registerDevice(): Promise<string> {
|
|
return "uuid1234";
|
|
}
|
|
|
|
export const getSession = async (): Promise<Session | null> => {
|
|
return null;
|
|
};
|
|
|
|
export const updateSession = async (session: Partial<Session>) => {
|
|
console.log(session);
|
|
};
|
|
|
|
export const openTerminal = (cmd: string) => console.log(cmd);
|
|
|
|
export const shellOpenExternal = (link: string) => {
|
|
window.open(link, "_blank");
|
|
};
|