diff --git a/frontend/DM.Web.Modern.Temp/src/api/index.ts b/frontend/DM.Web.Modern.Temp/src/api/index.ts index 9a290a00..a4a142b1 100644 --- a/frontend/DM.Web.Modern.Temp/src/api/index.ts +++ b/frontend/DM.Web.Modern.Temp/src/api/index.ts @@ -64,21 +64,24 @@ class Api { public postFile( url: string, params?: any, - progressCallback?: (event: AxiosProgressEvent) => void, + progressCallback?: (event: ProgressEvent) => void, ): Promise> { const result = this.send(() => this.axios.post(url, params, { onUploadProgress: progressCallback ? (event: AxiosProgressEvent) => progressCallback( - event.loaded === event.total - ? ({ loaded: 99, total: 100 } as AxiosProgressEvent) - : event, + (event.loaded === event.total + ? { loaded: 99, total: 100 } + : event) as ProgressEvent, ) : undefined, + headers: { + "Content-Type": "multipart/form-data", + }, }), ); - progressCallback?.({ loaded: 1, total: 1 } as AxiosProgressEvent); + progressCallback?.({ loaded: 1, total: 1 } as ProgressEvent); return result; } diff --git a/frontend/DM.Web.Modern.Temp/src/api/requests/communityApi.ts b/frontend/DM.Web.Modern.Temp/src/api/requests/communityApi.ts index e00d23ba..748368bf 100644 --- a/frontend/DM.Web.Modern.Temp/src/api/requests/communityApi.ts +++ b/frontend/DM.Web.Modern.Temp/src/api/requests/communityApi.ts @@ -10,7 +10,6 @@ import type { } from "@/api/models/community"; import Api from "@/api"; import { BbRenderMode } from "../bbRenderMode"; -import type { AxiosProgressEvent } from "axios"; import type { Patch, Post } from "@/api/models"; export default new (class CommunityApi { @@ -47,7 +46,7 @@ export default new (class CommunityApi { public uploadUserPicture( login: UserLogin, files: FormData, - progressCallback: (event: AxiosProgressEvent) => void, + progressCallback: (event: ProgressEvent) => void, ) { return Api.postFile>( `users/${login}/uploads`, diff --git a/frontend/DM.Web.Modern.Temp/src/assets/styles/Themes.sass b/frontend/DM.Web.Modern.Temp/src/assets/styles/Themes.sass index 56bc05d6..f4680314 100644 --- a/frontend/DM.Web.Modern.Temp/src/assets/styles/Themes.sass +++ b/frontend/DM.Web.Modern.Temp/src/assets/styles/Themes.sass @@ -7,7 +7,7 @@ @return color-set($light, $light, $light, $light, $dark) -$animation-props: background-color, color, border-color, filter +$animation-props: background-color, color, border-color, filter, opacity @mixin theme($attr, $color-set, $value-prefix: null) transition-property: $animation-props transition-duration: Variables.$animation-time diff --git a/frontend/DM.Web.Modern.Temp/src/components/index.ts b/frontend/DM.Web.Modern.Temp/src/components/index.ts index a4574c55..23cf921f 100644 --- a/frontend/DM.Web.Modern.Temp/src/components/index.ts +++ b/frontend/DM.Web.Modern.Temp/src/components/index.ts @@ -20,6 +20,9 @@ import UserOnline from "@/components/community/UserOnline.vue"; import UserRating from "@/components/community/UserRating.vue"; import UserIcon from "@/components/community/UserIcon.vue"; import DmPaging from "@/components/ui-kit/DmPaging.vue"; +import DmIconButton from "@/components/ui-kit/DmIconButton.vue"; +import DmUpload from "@/components/ui-kit/DmUpload.vue"; +import DmProgress from "@/components/ui-kit/DmProgress.vue"; export default function (application: App) { application.config.globalProperties.IconType = IconType; @@ -29,7 +32,8 @@ export default function (application: App) { .component("DmLoader", DmLoader) .component("DmDialog", DmDialog) .component("DmPaging", DmPaging) - .component("DmMenu", DmMenu); + .component("DmMenu", DmMenu) + .component("DmProgress", DmProgress); application .component("DmForm", DmForm) @@ -37,7 +41,9 @@ export default function (application: App) { .component("DmInput", DmInput) .component("DmText", DmText) .component("DmDropdown", DmDropdown) - .component("DmButton", DmButton); + .component("DmUpload", DmUpload) + .component("DmButton", DmButton) + .component("DmIconButton", DmIconButton); application .component("PageTitle", PageTitle) diff --git a/frontend/DM.Web.Modern.Temp/src/components/ui-kit/DmButton.vue b/frontend/DM.Web.Modern.Temp/src/components/ui-kit/DmButton.vue index dffc5f40..aff944e8 100644 --- a/frontend/DM.Web.Modern.Temp/src/components/ui-kit/DmButton.vue +++ b/frontend/DM.Web.Modern.Temp/src/components/ui-kit/DmButton.vue @@ -19,7 +19,7 @@ defineProps<{ }" > @@ -37,6 +37,7 @@ defineProps<{ background-size: Variables.$medium background-repeat: no-repeat color: transparent !important + cursor: progress .button-icon margin-right: Variables.$minor diff --git a/frontend/DM.Web.Modern.Temp/src/components/ui-kit/DmForm.vue b/frontend/DM.Web.Modern.Temp/src/components/ui-kit/DmForm.vue index 50c66447..7b2ede07 100644 --- a/frontend/DM.Web.Modern.Temp/src/components/ui-kit/DmForm.vue +++ b/frontend/DM.Web.Modern.Temp/src/components/ui-kit/DmForm.vue @@ -3,14 +3,12 @@ defineEmits(["submit"]); diff --git a/frontend/DM.Web.Modern.Temp/src/components/ui-kit/DmLoader.vue b/frontend/DM.Web.Modern.Temp/src/components/ui-kit/DmLoader.vue index ce985a52..85a43673 100644 --- a/frontend/DM.Web.Modern.Temp/src/components/ui-kit/DmLoader.vue +++ b/frontend/DM.Web.Modern.Temp/src/components/ui-kit/DmLoader.vue @@ -3,7 +3,7 @@ defineProps<{ big?: boolean }>(); diff --git a/frontend/DM.Web.Modern.Temp/src/components/ProgressBar.vue b/frontend/DM.Web.Modern.Temp/src/components/ui-kit/DmProgress.vue similarity index 95% rename from frontend/DM.Web.Modern.Temp/src/components/ProgressBar.vue rename to frontend/DM.Web.Modern.Temp/src/components/ui-kit/DmProgress.vue index bf921b64..8ef5a8e1 100644 --- a/frontend/DM.Web.Modern.Temp/src/components/ProgressBar.vue +++ b/frontend/DM.Web.Modern.Temp/src/components/ui-kit/DmProgress.vue @@ -20,7 +20,7 @@ const progress = computed(() => (props.current / props.goal) * 100); position: relative overflow: hidden margin: Variables.$small 0 - padding: Variables.$small + padding: Variables.$minor Variables.$small border-radius: Variables.$border-radius +Themes.theme(background-color, Themes.$progress-background) diff --git a/frontend/DM.Web.Modern.Temp/src/components/ui-kit/DmText.vue b/frontend/DM.Web.Modern.Temp/src/components/ui-kit/DmText.vue index bf48cc80..c3151187 100644 --- a/frontend/DM.Web.Modern.Temp/src/components/ui-kit/DmText.vue +++ b/frontend/DM.Web.Modern.Temp/src/components/ui-kit/DmText.vue @@ -8,12 +8,12 @@ defineProps<{ disabled?: boolean; placeholder?: string; readonly?: boolean; + rows?: number; }>(); const isFilled = computed(() => !!model.value); const dispatchSubmit = (nativeInput: HTMLInputElement) => { - console.log(nativeInput); const event = new Event("submit"); nativeInput.form?.dispatchEvent(event); }; @@ -25,10 +25,10 @@ const dispatchSubmit = (nativeInput: HTMLInputElement) => { +import { ref } from "vue"; + +const emit = defineEmits(["upload"]); + +const input = ref(); +const upload = (event: Event) => { + const target = event.target as HTMLInputElement; + const files = target.files; + + if (!files?.length) return; + + const formData = new FormData(); + const name = files.length > 1 ? "files" : "file"; + + for (const file of files) formData.append(name, file); + emit("upload", formData); +}; + + + + + diff --git a/frontend/DM.Web.Modern.Temp/src/composables/useEditMode.ts b/frontend/DM.Web.Modern.Temp/src/composables/useEditMode.ts new file mode 100644 index 00000000..86cc03cc --- /dev/null +++ b/frontend/DM.Web.Modern.Temp/src/composables/useEditMode.ts @@ -0,0 +1,17 @@ +import { computed, ref, useId } from "vue"; + +const activeId = ref(null); + +export default function useEditMode() { + const id = useId(); + const isActive = computed(() => activeId.value === id); + const acquire = () => (activeId.value = id); + const release = () => (activeId.value = null); + + return { + id, + isActive, + acquire, + release, + }; +} diff --git a/frontend/DM.Web.Modern.Temp/src/views/layout/sidebar/TheDonation.vue b/frontend/DM.Web.Modern.Temp/src/views/layout/sidebar/TheDonation.vue index b3bc4e06..7b3ddc34 100644 --- a/frontend/DM.Web.Modern.Temp/src/views/layout/sidebar/TheDonation.vue +++ b/frontend/DM.Web.Modern.Temp/src/views/layout/sidebar/TheDonation.vue @@ -1,23 +1,21 @@ + + - - diff --git a/frontend/DM.Web.Modern.Temp/src/views/pages/forum/EditTopic.vue b/frontend/DM.Web.Modern.Temp/src/views/pages/forum/EditTopic.vue index 4e483cc4..6af520f6 100644 --- a/frontend/DM.Web.Modern.Temp/src/views/pages/forum/EditTopic.vue +++ b/frontend/DM.Web.Modern.Temp/src/views/pages/forum/EditTopic.vue @@ -2,10 +2,6 @@ import type { Topic } from "@/api/models/forum"; import { ref, watch } from "vue"; import forumApi from "@/api/requests/forumApi"; -import DmForm from "@/components/ui-kit/DmForm.vue"; -import DmLoader from "@/components/ui-kit/DmLoader.vue"; -import DmField from "@/components/ui-kit/DmField.vue"; -import DmInput from "@/components/ui-kit/DmInput.vue"; const active = defineModel("active"); const props = defineProps<{ topic: Topic }>(); diff --git a/frontend/DM.Web.Modern.Temp/src/views/pages/forum/ForumTopic.vue b/frontend/DM.Web.Modern.Temp/src/views/pages/forum/ForumTopic.vue index 141c1005..e9714ed4 100644 --- a/frontend/DM.Web.Modern.Temp/src/views/pages/forum/ForumTopic.vue +++ b/frontend/DM.Web.Modern.Temp/src/views/pages/forum/ForumTopic.vue @@ -1,8 +1,14 @@