diff --git a/fe_calckey/frontend/client/src/components/MagPagination.vue b/fe_calckey/frontend/client/src/components/MagPagination.vue new file mode 100644 index 0000000..c5ffcaf --- /dev/null +++ b/fe_calckey/frontend/client/src/components/MagPagination.vue @@ -0,0 +1,399 @@ + + + + + diff --git a/fe_calckey/frontend/client/src/components/MkUserInfo.vue b/fe_calckey/frontend/client/src/components/MkUserInfo.vue index c9ce664..b54221f 100644 --- a/fe_calckey/frontend/client/src/components/MkUserInfo.vue +++ b/fe_calckey/frontend/client/src/components/MkUserInfo.vue @@ -3,7 +3,13 @@

{{ i18n.ts.notes }}

- +

{{ i18n.ts.following }}

- +

{{ i18n.ts.followers }}

- +
@@ -58,9 +83,11 @@ import MkNumber from "@/components/MkNumber.vue"; import { userPage } from "@/filters/user"; import { i18n } from "@/i18n"; import { $i } from "@/account"; +import { packed } from "magnetar-common"; +import { magMaybeProperty, magTransProperty } from "@/scripts-mag/mag-util"; defineProps<{ - user: misskey.entities.UserDetailed; + user: packed.PackUserMaybeAll | misskey.entities.UserDetailed; }>(); diff --git a/fe_calckey/frontend/client/src/filters/user.ts b/fe_calckey/frontend/client/src/filters/user.ts index e032b04..3c970cf 100644 --- a/fe_calckey/frontend/client/src/filters/user.ts +++ b/fe_calckey/frontend/client/src/filters/user.ts @@ -10,6 +10,10 @@ export const userName = (user: misskey.entities.User) => { return user.name || user.username; }; -export const userPage = (user: misskey.Acct, path?, absolute = false) => { +export const userPage = ( + user: misskey.Acct, + path?: string, + absolute = false +) => { return `${absolute ? url : ""}/@${acct(user)}${path ? `/${path}` : ""}`; }; diff --git a/fe_calckey/frontend/client/src/os.ts b/fe_calckey/frontend/client/src/os.ts index 08f3b8a..20be7da 100644 --- a/fe_calckey/frontend/client/src/os.ts +++ b/fe_calckey/frontend/client/src/os.ts @@ -18,6 +18,7 @@ import { FrontendApiEndpoints, MagApiClient, Method, + PaginatedResult, types, } from "magnetar-common"; import { magReactionToLegacy } from "@/scripts-mag/mag-util"; @@ -48,7 +49,9 @@ export async function magApi< | number; }, token?: string | null | undefined -): Promise { +): Promise< + T["paginated"] extends true ? PaginatedResult : T["response"] +> { pendingApiRequestsCount.value++; try { diff --git a/fe_calckey/frontend/client/src/pages/follow-requests.vue b/fe_calckey/frontend/client/src/pages/follow-requests.vue index 1afc3b1..5f369ef 100644 --- a/fe_calckey/frontend/client/src/pages/follow-requests.vue +++ b/fe_calckey/frontend/client/src/pages/follow-requests.vue @@ -2,7 +2,10 @@ - + - diff --git a/fe_calckey/frontend/magnetar-common/src/be-api.ts b/fe_calckey/frontend/magnetar-common/src/be-api.ts index 40dddb3..d3b856c 100644 --- a/fe_calckey/frontend/magnetar-common/src/be-api.ts +++ b/fe_calckey/frontend/magnetar-common/src/be-api.ts @@ -13,7 +13,7 @@ export interface BackendApiEndpoint< endpoint: string; pathParams: PP; request?: T; - response?: R; + response?: R & (PG extends true ? any[] : any); paginated: PG; } @@ -58,7 +58,7 @@ export interface MagApiError { export interface PaginatedResult { prev?: URL; - data: T; + data: T & any[]; next?: URL; } @@ -81,7 +81,12 @@ function extractHeaderRel( const relMatch = relPar.match(/rel="(.+?)"/)?.[1]; if (relMatch == rel && urlMatch) { - return new URL(urlMatch); + try { + return new URL(urlMatch); + } catch (e) { + console.error(e); + return undefined; + } } } } diff --git a/fe_calckey/frontend/magnetar-common/src/index.ts b/fe_calckey/frontend/magnetar-common/src/index.ts index 163b955..c6a753c 100644 --- a/fe_calckey/frontend/magnetar-common/src/index.ts +++ b/fe_calckey/frontend/magnetar-common/src/index.ts @@ -4,6 +4,7 @@ import { MagApiError, MagApiErrorCode, Method, + PaginatedResult, } from "./be-api"; import { @@ -19,6 +20,7 @@ export * as endpoints from "./endpoints"; export { Method, BackendApiEndpoint, + PaginatedResult, MagApiError, MagApiClient, MagApiErrorCode, diff --git a/fe_calckey/frontend/magnetar-common/src/types/PaginationShape.ts b/fe_calckey/frontend/magnetar-common/src/types/PaginationShape.ts index 2f8bf97..a5a161f 100644 --- a/fe_calckey/frontend/magnetar-common/src/types/PaginationShape.ts +++ b/fe_calckey/frontend/magnetar-common/src/types/PaginationShape.ts @@ -1,4 +1,4 @@ // This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually. import type { SpanFilter } from "./SpanFilter"; -export interface PaginationShape { pagination: SpanFilter, limit: bigint, } \ No newline at end of file +export interface PaginationShape { pagination: SpanFilter, limit: number, } \ No newline at end of file diff --git a/fe_calckey/frontend/pnpm-lock.yaml b/fe_calckey/frontend/pnpm-lock.yaml index c77a523..1769d0e 100644 --- a/fe_calckey/frontend/pnpm-lock.yaml +++ b/fe_calckey/frontend/pnpm-lock.yaml @@ -426,6 +426,14 @@ packages: '@babel/types': 7.22.5 dev: true + /@babel/parser@7.23.6: + resolution: {integrity: sha512-Z2uID7YJ7oNvAI20O9X0bblw7Qqs8Q2hFy0R9tAfnfLkp5MW0UH9eUvnDSnFwKZ0AvgS1ucqR4KzvVHgnke1VQ==} + engines: {node: '>=6.0.0'} + hasBin: true + dependencies: + '@babel/types': 7.22.5 + dev: true + /@babel/runtime@7.20.7: resolution: {integrity: sha512-UF0tvkUtxwAgZ5W/KrkHf0Rn0fdnLDU9ScxBrEVNUprE/MzirjK4MJUX1/BVDv00Sv8cljtukVK1aky++X1SjQ==} engines: {node: '>=6.9.0'} @@ -1445,7 +1453,7 @@ packages: /@vue/compiler-core@3.3.4: resolution: {integrity: sha512-cquyDNvZ6jTbf/+x+AgM2Arrp6G4Dzbb0R64jiG804HRMfRiFXWI6kqUVqZ6ZR0bQhIoQjB4+2bhNtVwndW15g==} dependencies: - '@babel/parser': 7.22.7 + '@babel/parser': 7.23.6 '@vue/shared': 3.3.4 estree-walker: 2.0.2 source-map-js: 1.0.2 @@ -1461,7 +1469,7 @@ packages: /@vue/compiler-sfc@2.7.14: resolution: {integrity: sha512-aNmNHyLPsw+sVvlQFQ2/8sjNuLtK54TC6cuKnVzAY93ks4ZBrvwQSnkkIh7bsbNhum5hJBS00wSDipQ937f5DA==} dependencies: - '@babel/parser': 7.22.7 + '@babel/parser': 7.23.6 postcss: 8.4.25 source-map: 0.6.1 dev: true @@ -1516,7 +1524,7 @@ packages: dependencies: '@vue/runtime-core': 3.3.4 '@vue/shared': 3.3.4 - csstype: 3.1.2 + csstype: 3.1.3 dev: true /@vue/server-renderer@3.3.4(vue@3.3.4): @@ -2793,8 +2801,8 @@ packages: source-map: 0.5.7 dev: true - /csstype@3.1.2: - resolution: {integrity: sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==} + /csstype@3.1.3: + resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} dev: true /custom-event-polyfill@1.0.7: @@ -7444,9 +7452,10 @@ packages: /vue@2.7.14: resolution: {integrity: sha512-b2qkFyOM0kwqWFuQmgd4o+uHGU7T+2z3T+WQp8UBjADfEv2n4FEMffzBmCKNP0IGzOEEfYjvtcC62xaSKeQDrQ==} + deprecated: Vue 2 has reached EOL and is no longer actively maintained. See https://v2.vuejs.org/eol/ for more details. dependencies: '@vue/compiler-sfc': 2.7.14 - csstype: 3.1.2 + csstype: 3.1.3 dev: true /vue@3.3.4: diff --git a/magnetar_sdk/src/util_types.rs b/magnetar_sdk/src/util_types.rs index 9f13015..ae226a6 100644 --- a/magnetar_sdk/src/util_types.rs +++ b/magnetar_sdk/src/util_types.rs @@ -11,11 +11,11 @@ impl TS for U64Range { const EXPORT_TO: Option<&'static str> = Some("bindings/util/u64_range.ts"); fn decl() -> String { - ::decl() + ::decl() } fn name() -> String { - ::name() + ::name() } fn dependencies() -> Vec {