From 910db80068be999a99f346ffe1f0251866009d44 Mon Sep 17 00:00:00 2001 From: Kloon ImKloon Date: Mon, 11 Sep 2023 11:28:35 +0200 Subject: [PATCH] Merge branch 'vue3-wip' into vue3 --- frontend/src/api/share.ts | 8 +- frontend/src/components/settings/Themes.vue | 29 ++- frontend/src/components/settings/UserForm.vue | 93 ++++---- frontend/src/stores/auth.ts | 26 ++- frontend/src/types/api.d.ts | 4 +- frontend/src/types/user.d.ts | 27 ++- frontend/src/views/settings/Global.vue | 4 +- frontend/src/views/settings/Profile.vue | 214 +++++++++--------- frontend/src/views/settings/Shares.vue | 160 +++++++------ frontend/src/views/settings/User.vue | 208 +++++++++-------- frontend/src/views/settings/Users.vue | 59 +++-- 11 files changed, 431 insertions(+), 401 deletions(-) diff --git a/frontend/src/api/share.ts b/frontend/src/api/share.ts index 241702f0..52987415 100644 --- a/frontend/src/api/share.ts +++ b/frontend/src/api/share.ts @@ -1,11 +1,11 @@ -import type { Share } from "@/types"; +import type { ApiUrl, IShare } from "@/types"; import { fetchURL, fetchJSON, removePrefix, createURL } from "./utils"; export async function list() { return fetchJSON("/api/shares"); } -export async function get(url: string) { +export async function get(url: ApiUrl) { url = removePrefix(url); return fetchJSON(`/api/share${url}`); } @@ -17,7 +17,7 @@ export async function remove(hash: string) { } export async function create( - url: string, + url: ApiUrl, password = "", expires = "", unit = "hours" @@ -41,6 +41,6 @@ export async function create( }); } -export function getShareURL(share: Share) { +export function getShareURL(share: IShare) { return createURL("share/" + share.hash, {}, false); } diff --git a/frontend/src/components/settings/Themes.vue b/frontend/src/components/settings/Themes.vue index a2ccfa6b..d440336c 100644 --- a/frontend/src/components/settings/Themes.vue +++ b/frontend/src/components/settings/Themes.vue @@ -1,18 +1,25 @@ - diff --git a/frontend/src/components/settings/UserForm.vue b/frontend/src/components/settings/UserForm.vue index dd250cf2..0c7397dc 100644 --- a/frontend/src/components/settings/UserForm.vue +++ b/frontend/src/components/settings/UserForm.vue @@ -1,6 +1,6 @@ - diff --git a/frontend/src/stores/auth.ts b/frontend/src/stores/auth.ts index 0ac05182..2b4defa8 100644 --- a/frontend/src/stores/auth.ts +++ b/frontend/src/stores/auth.ts @@ -1,4 +1,4 @@ -import type { User } from "@/types"; +import type { IUser } from "@/types"; import { defineStore } from "pinia"; import dayjs from "dayjs"; import i18n, { detectLocale } from "@/i18n"; @@ -7,7 +7,7 @@ import { cloneDeep } from "lodash-es"; export const useAuthStore = defineStore("auth", { // convert to a function state: (): { - user: User | null; + user: IUser | null; jwt: string; } => ({ user: null, @@ -19,24 +19,26 @@ export const useAuthStore = defineStore("auth", { }, actions: { // no context as first argument, use `this` instead - setUser(value: User) { - if (value === null) { + setUser(user: IUser | null) { + if (user === null) { this.user = null; return; } - const locale = value.locale || detectLocale(); + const locale = user.locale || detectLocale(); dayjs.locale(locale); - // according to doc u only need .value if legacy: false - // in createI18n but they lied - // https://vue-i18n.intlify.dev/guide/essentials/scope.html#local-scope-1 //@ts-ignore i18n.global.locale = locale; - this.user = value; + this.user = user; }, - updateUser(value: User) { - if (typeof value !== "object" || !value) return; - this.setUser(cloneDeep(value)); + updateUser(user: Partial) { + if (user.locale) { + dayjs.locale(user.locale); + //@ts-ignore + i18n.global.locale = user.locale; + } + + this.user = { ...this.user, ...cloneDeep(user) } as IUser; }, // easily reset state using `$reset` clearUser() { diff --git a/frontend/src/types/api.d.ts b/frontend/src/types/api.d.ts index 5700b0a3..01c2de6a 100644 --- a/frontend/src/types/api.d.ts +++ b/frontend/src/types/api.d.ts @@ -1,3 +1,5 @@ +export type ApiUrl = string; // Can also be set as a path eg: "path1" | "path2" + export type ApiMethod = "GET" | "POST" | "PUT" | "DELETE" | "PATCH"; export type ApiContent = @@ -21,7 +23,7 @@ export type ChecksumAlgs = "md5" | "sha1" | "sha256" | "sha512"; type inline = any; -export interface Share { +export interface IShare { expire: any; hash: string; path: string; diff --git a/frontend/src/types/user.d.ts b/frontend/src/types/user.d.ts index ad01b816..cc8b5b7d 100644 --- a/frontend/src/types/user.d.ts +++ b/frontend/src/types/user.d.ts @@ -1,7 +1,16 @@ -export interface User { +export interface IUser { id: number; + username: string; + password: string; + scope: string; locale: string; perm: Permissions; + commands: string[]; + rules: IRule[]; + lockPassword: boolean; + hideDotfiles: boolean; + singleClick: boolean; + dateFormat: boolean; } export interface Permissions { @@ -18,3 +27,19 @@ export interface Permissions { shell: boolean; upload: boolean; } + +export interface UserSorting { + by: string; + asc: boolean; +} + +export interface IRule { + allow: boolean; + path: string; + regex: boolean; + regexp: IRegexp; +} + +interface IRegexp { + raw: string; +} diff --git a/frontend/src/views/settings/Global.vue b/frontend/src/views/settings/Global.vue index 10cb5a80..23ac3754 100644 --- a/frontend/src/views/settings/Global.vue +++ b/frontend/src/views/settings/Global.vue @@ -257,8 +257,8 @@ const commandObject = ref<{ }>({}); const shellValue = ref(""); -const $showSuccess = inject("$showSuccess") as IToastSuccess; -const $showError = inject("$showError") as IToastError; +const $showError = inject("$showError")!; +const $showSuccess = inject("$showSuccess")!; const { t } = useI18n(); diff --git a/frontend/src/views/settings/Profile.vue b/frontend/src/views/settings/Profile.vue index 5ccf81df..172a2857 100644 --- a/frontend/src/views/settings/Profile.vue +++ b/frontend/src/views/settings/Profile.vue @@ -3,23 +3,23 @@
-

{{ $t("settings.profileSettings") }}

+

{{ t("settings.profileSettings") }}

- {{ $t("settings.hideDotfiles") }} + {{ t("settings.hideDotfiles") }}

- {{ $t("settings.singleClick") }} + {{ t("settings.singleClick") }}

- {{ $t("settings.setDateFormat") }} + {{ t("settings.setDateFormat") }}

-

{{ $t("settings.language") }}

+

{{ t("settings.language") }}

-
+
-

{{ $t("settings.changePassword") }}

+

{{ t("settings.changePassword") }}

@@ -63,7 +67,7 @@
@@ -71,102 +75,108 @@
- diff --git a/frontend/src/views/settings/Shares.vue b/frontend/src/views/settings/Shares.vue index 5a718331..a093da84 100644 --- a/frontend/src/views/settings/Shares.vue +++ b/frontend/src/views/settings/Shares.vue @@ -1,18 +1,20 @@ - diff --git a/frontend/src/views/settings/User.vue b/frontend/src/views/settings/User.vue index 1f75fc2f..0d346795 100644 --- a/frontend/src/views/settings/User.vue +++ b/frontend/src/views/settings/User.vue @@ -1,14 +1,14 @@ - diff --git a/frontend/src/views/settings/Users.vue b/frontend/src/views/settings/Users.vue index a60494f0..e1f96d6b 100644 --- a/frontend/src/views/settings/Users.vue +++ b/frontend/src/views/settings/Users.vue @@ -1,13 +1,13 @@ -