Skip to content
Snippets Groups Projects
Select Git revision
  • master default protected
1 result

users.js

Blame
  • Forked from TO / cf-online-ui
    55 commits behind the upstream repository.
    users.js 1.96 KiB
    import { createAsyncAction, errorResult, successResult } from "pullstate";
    
    import { fetch } from "api";
    import { AuthStore } from "stores";
    
    export const loadMe = createAsyncAction(
      /**
       * @param {number} userId
       */
      async () => {
        try {
          const response = await fetch(`/users/me`, {
            method: "GET",
            expectedStatus: 200,
          });
          const data = await response.json();
          return successResult(data);
        } catch (err) {
          return errorResult([], err.toString());
        }
      },
      {
        postActionHook: ({ result }) => {
          if (!result.error) {
            AuthStore.update((state) => {
              if (state.user) {
                state.user.id = result.payload.id;
                state.user.group = result.payload.group;
                state.user.isBanned = result.payload.is_banned;
                state.user.secret = result.payload.secret || "";
              }
            });
          }
        },
      }
    );
    
    export const ban = createAsyncAction(
      /**
       * @param {number} userId
       */
      async (user) => {
        try {
          await fetch(`/users/${user.id}/ban`, {
            method: "PATCH",
            expectedStatus: 204,
          });
          return successResult(user);
        } catch (err) {
          return errorResult([], err.toString());
        }
      }
    );
    
    export const unban = createAsyncAction(
      /**
       * @param {number} userId
       */
      async (user) => {
        try {
          await fetch(`/users/${user.id}/unban`, {
            method: "PATCH",
            expectedStatus: 204,
          });
          return successResult(user);
        } catch (err) {
          return errorResult([], err.toString());
        }
      }
    );
    
    export const inviteToJitsi = createAsyncAction(
      /**
       * @param {number} userId
       */
      async (user) => {
        try {
          const body = JSON.stringify({
            allowed: true,
          });
          await fetch(`/users/${user.id}/jitsi`, {
            method: "PATCH",
            body,
            expectedStatus: 204,
          });
          return successResult(user);
        } catch (err) {
          return errorResult([], err.toString());
        }
      }
    );