diff options
author | crupest <crupest@outlook.com> | 2020-05-30 23:41:31 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-05-30 23:41:31 +0800 |
commit | c8d71a3b5e7aef4fcf75bad44b7be90b45aaaf0b (patch) | |
tree | f76ecd77c99c4136d1ab4771b91a92f1e5ad4a35 /Timeline/ClientApp/src/user/api.ts | |
parent | 7e393559d2883a37b1be0c82cccc06bc97c3d102 (diff) | |
parent | 83de798e74323e96e81b8196b04e23ed2bd4efbf (diff) | |
download | timeline-c8d71a3b5e7aef4fcf75bad44b7be90b45aaaf0b.tar.gz timeline-c8d71a3b5e7aef4fcf75bad44b7be90b45aaaf0b.tar.bz2 timeline-c8d71a3b5e7aef4fcf75bad44b7be90b45aaaf0b.zip |
Merge pull request #72 from crupest/merge-frontend
Merge frontend repo into this repo.
Diffstat (limited to 'Timeline/ClientApp/src/user/api.ts')
-rw-r--r-- | Timeline/ClientApp/src/user/api.ts | 78 |
1 files changed, 78 insertions, 0 deletions
diff --git a/Timeline/ClientApp/src/user/api.ts b/Timeline/ClientApp/src/user/api.ts new file mode 100644 index 00000000..184c011f --- /dev/null +++ b/Timeline/ClientApp/src/user/api.ts @@ -0,0 +1,78 @@ +import React from 'react';
+import axios from 'axios';
+import { BehaviorSubject, Observable } from 'rxjs';
+
+import { apiBaseUrl } from '../config';
+import { User } from '../data/user';
+import { updateQueryString } from '../helper';
+
+export function changeNickname(
+ token: string,
+ username: string,
+ newNickname: string
+): Promise<User> {
+ return axios
+ .patch<User>(`${apiBaseUrl}/users/${username}?token=${token}`, {
+ nickname: newNickname,
+ })
+ .then((res) => res.data);
+}
+
+const avatarVersionSubject = new BehaviorSubject<number | undefined>(undefined);
+
+export function changeAvatar(
+ token: string,
+ username: string,
+ data: Blob,
+ type: string
+): Promise<void> {
+ return axios
+ .put(`${apiBaseUrl}/users/${username}/avatar?token=${token}`, data, {
+ headers: {
+ 'Content-Type': type,
+ },
+ })
+ .then(() => {
+ avatarVersionSubject.next((avatarVersionSubject.value ?? 0) + 1);
+ });
+}
+
+export const avatarVersion$: Observable<
+ number | undefined
+> = avatarVersionSubject;
+
+export function useAvatarVersion(): number | undefined {
+ const [version, setVersion] = React.useState<number | undefined>();
+ React.useEffect(() => {
+ const subscription = avatarVersion$.subscribe((v) => setVersion(v));
+ return () => subscription.unsubscribe();
+ }, []);
+ return version;
+}
+
+export function useOptionalVersionedAvatarUrl(
+ url: string | undefined
+): string | undefined {
+ const avatarVersion = useAvatarVersion();
+ return React.useMemo(
+ () =>
+ url == null
+ ? undefined
+ : updateQueryString(
+ 'v',
+ avatarVersion == null ? null : avatarVersion + '',
+ url
+ ),
+ [avatarVersion, url]
+ );
+}
+
+export function useAvatarUrlWithGivenVersion(
+ version: number | null | undefined,
+ url: string
+): string {
+ return React.useMemo(
+ () => updateQueryString('v', version == null ? null : version + '', url),
+ [version, url]
+ );
+}
|