client: updates

* work on groups ui
* move settings to its own page
* other fixes and refactoring
This commit is contained in:
Philipinho
2024-04-04 22:19:15 +01:00
parent cab5e67055
commit 1412f1d982
64 changed files with 1770 additions and 474 deletions

View File

@ -1,5 +1,5 @@
import { Group, Box, Button, TagsInput, Space, Select } from "@mantine/core";
import WorkspaceInviteSection from "@/features/settings/workspace/members/components/workspace-invite-section";
import WorkspaceInviteSection from "@/features/workspace/components/members/components/workspace-invite-section.tsx";
import React from "react";
enum UserRole {

View File

@ -1,27 +1,27 @@
import { WorkspaceInviteForm } from '@/features/settings/workspace/members/components/workspace-invite-form';
import { Button, Divider, Modal, ScrollArea } from '@mantine/core';
import { useDisclosure } from '@mantine/hooks';
import { WorkspaceInviteForm } from "@/features/workspace/components/members/components/workspace-invite-form.tsx";
import { Button, Divider, Modal, ScrollArea } from "@mantine/core";
import { useDisclosure } from "@mantine/hooks";
export default function WorkspaceInviteModal() {
const [opened, { open, close }] = useDisclosure(false);
return (
<>
<Button onClick={open}>
Invite members
</Button>
<Button onClick={open}>Invite members</Button>
<Modal size="600" opened={opened} onClose={close} title="Invite new members" centered>
<Divider size="xs" mb="xs"/>
<Modal
size="600"
opened={opened}
onClose={close}
title="Invite new members"
centered
>
<Divider size="xs" mb="xs" />
<ScrollArea h="80%">
<WorkspaceInviteForm />
</ScrollArea>
</Modal>
</>
);
}

View File

@ -1,5 +1,5 @@
import { useAtom } from "jotai";
import { currentUserAtom } from "@/features/user/atoms/current-user-atom";
import { currentUserAtom } from "@/features/user/atoms/current-user-atom.ts";
import { useEffect, useState } from "react";
import { Button, CopyButton, Group, Text, TextInput } from "@mantine/core";

View File

@ -1,5 +1,5 @@
import { Group, Table, Avatar, Text, Badge } from "@mantine/core";
import { useWorkspaceMembersQuery } from "@/features/workspace/queries/workspace-query";
import { useWorkspaceMembersQuery } from "@/features/workspace/queries/workspace-query.ts";
import { UserAvatar } from "@/components/ui/user-avatar.tsx";
import React from "react";

View File

@ -1,10 +1,10 @@
import { currentUserAtom } from "@/features/user/atoms/current-user-atom";
import { currentUserAtom } from "@/features/user/atoms/current-user-atom.ts";
import { useAtom } from "jotai";
import * as z from "zod";
import { useState } from "react";
import { focusAtom } from "jotai-optics";
import { updateWorkspace } from "@/features/workspace/services/workspace-service";
import { IWorkspace } from "@/features/workspace/types/workspace.types";
import { updateWorkspace } from "@/features/workspace/services/workspace-service.ts";
import { IWorkspace } from "@/features/workspace/types/workspace.types.ts";
import { TextInput, Button } from "@mantine/core";
import { useForm, zodResolver } from "@mantine/form";
import { notifications } from "@mantine/notifications";

View File

@ -0,0 +1,10 @@
import { useQuery } from "@tanstack/react-query";
import { getWorkspaceMembers } from "@/features/workspace/services/workspace-service";
import { QueryParams } from "@/lib/types.ts";
export function useWorkspaceMembersQuery(params?: QueryParams) {
return useQuery({
queryKey: ["workspaceMembers", params],
queryFn: () => getWorkspaceMembers(params),
});
}

View File

@ -1,19 +1,21 @@
import api from '@/lib/api-client';
import { ICurrentUserResponse, IUser } from '@/features/user/types/user.types';
import { IWorkspace } from '../types/workspace.types';
import api from "@/lib/api-client";
import { IUser } from "@/features/user/types/user.types";
import { IWorkspace } from "../types/workspace.types";
import { QueryParams } from "@/lib/types.ts";
export async function getWorkspace(): Promise<IWorkspace> {
const req = await api.get<IWorkspace>('/workspace');
const req = await api.post<IWorkspace>("/workspace/info");
return req.data as IWorkspace;
}
export async function getWorkspaceUsers(): Promise<IUser[]> {
const req = await api.get<IUser[]>('/workspace/members');
return req.data as IUser[];
// Todo: fix all paginated types
export async function getWorkspaceMembers(params?: QueryParams): Promise<any> {
const req = await api.post<any>("/workspace/members", params);
return req.data;
}
export async function updateWorkspace(data: Partial<IWorkspace>) {
const req = await api.post<IWorkspace>('/workspace/update', data);
const req = await api.post<IWorkspace>("/workspace/update", data);
return req.data as IWorkspace;
}

View File

@ -8,8 +8,6 @@ export interface IWorkspace {
enableInvite: boolean;
inviteCode: string;
settings: any;
creatorId: string;
pageOrder?:[]
createdAt: Date;
updatedAt: Date;
}