diff --git a/src/api/groups.service.ts b/src/api/groups.service.ts index 97715d03..34bd03f9 100644 --- a/src/api/groups.service.ts +++ b/src/api/groups.service.ts @@ -5,18 +5,24 @@ import type { AddGroupMembers, RemoveGroupMember, PostGroupProjects, - RemoveGroupProject, AddParentGroupModelInput, + GroupMember, + HierarchyGroupModel, } from '@/models/group.model' // import type { HierarchyGroupModel } from '@/models/group.model' // import type { APIResponseList } from '@/api/types' import { _adaptParamsToGetQuery } from '@/api/utils.service' import useAPI from '@/composables/useAPI' +import { ProjectModel } from '@/models/project.model' +import { PeopleGroupModel } from '@/models/invitation.model' // HIERARCHY -export async function getHierarchyGroups(org: string) { - return await useAPI(`organization/${org}/people-groups-hierarchy/`, {}) //.data.value +export function getHierarchyGroups(organizationCode: string, config = {}) { + return useAPI( + `organization/${organizationCode}/people-groups-hierarchy/`, + config + ) } export async function getPeopleGroupsHierarchy(org_code, params) { @@ -46,57 +52,62 @@ export async function postGroup(org: string, groupData: PostGroupData) { export async function addParentGroup( orgId: string, - groupId: string, + groupId: number, body: AddParentGroupModelInput ) { return await useAPI(`organization/${orgId}/people-group/${groupId}/`, { body, method: 'PATCH' }) //.data.value } -export async function getGroup(org: string, groupId: string, noError: boolean = false) { - return await useAPI( - `/organization/${org}/people-group/${groupId}/`, - { noError: noError } // TODO nuxt check error silenced - ) //.data.value +export function getGroup(organizationCode: string, groupId: number, config = {}) { + return useAPI( + `organization/${organizationCode}/people-group/${groupId}/`, + config + ) } -export async function patchGroup(org: string, group_id: number, groupData: Partial) { - return await useAPI(`organization/${org}/people-group/${group_id}/`, { +export async function patchGroup( + organizationCode: string, + groupName: string, + groupData: Partial +) { + return await useAPI(`organization/${organizationCode}/people-group/${groupName}/`, { body: groupData, method: 'PATCH', }) //.data.value } -export async function deleteGroup(org_code, group_id) { - return await useAPI(`organization/${org_code}/people-group/${group_id}/`, { method: 'DELETE' }) //.data.value +export async function deleteGroup(organizationCode: string, groupName: string) { + return await useAPI(`organization/${organizationCode}/people-group/${groupName}/`, { + method: 'DELETE', + }) //.data.value } // GROUP MEMBERS -export async function getGroupMember(org: string, groupId: string, noError: boolean = false) { - return ( - // TODO nuxt check error silenced - await useAPI(`organization/${org}/people-group/${groupId}/member/`, { noError: noError }) - //.data.value +export function getGroupMember(organizationCode: string, groupId: number, config = {}) { + return useAPI>( + `organization/${organizationCode}/people-group/${groupId}/member/`, + config ) } export async function postGroupMembers( - org: string, - group_id: number, + organizationCode: string, + groupId: number, membersData: AddGroupMembers ) { - return await useAPI(`organization/${org}/people-group/${group_id}/member/add/`, { + return await useAPI(`organization/${organizationCode}/people-group/${groupId}/member/add/`, { body: membersData, method: 'POST', }) //.data.value } export async function removeGroupMember( - org: string, - group_id: number, + organizationCode: string, + groupId: number, membersData: RemoveGroupMember ) { - return await useAPI(`organization/${org}/people-group/${group_id}/member/remove/`, { + return await useAPI(`organization/${organizationCode}/people-group/${groupId}/member/remove/`, { body: membersData, method: 'POST', }) //.data.value @@ -104,10 +115,11 @@ export async function removeGroupMember( // GROUP PROJECTS -export async function getGroupProject(org: string, groupId: string, noError: boolean = false) { - return await useAPI(`organization/${org}/people-group/${groupId}/project/`, { - noError: noError, - }) //.data.value +export function getGroupProject(organizationCode: string, groupId: number, config = {}) { + return useAPI>( + `organization/${organizationCode}/people-group/${groupId}/project/`, + config + ) } export async function postGroupProjects( @@ -124,7 +136,7 @@ export async function postGroupProjects( export async function removeGroupProject( org: string, group_id: number, - projectsData: RemoveGroupProject + projectsData: PostGroupProjects ) { return await useAPI(`organization/${org}/people-group/${group_id}/project/remove/`, { body: projectsData, diff --git a/src/api/v2/group.service.ts b/src/api/v2/group.service.ts new file mode 100644 index 00000000..37198cd7 --- /dev/null +++ b/src/api/v2/group.service.ts @@ -0,0 +1,91 @@ +import { + getGroup as fetchGetGroup, + getGroupProject as fetchGetGroupProject, + getHierarchyGroups as fetchGetHierarchyGroups, + getGroupMember as fetchGetGroupMember, +} from '@/api/groups.service' +import useAsyncAPI from '@/composables/useAsyncAPI' +import useAsyncPaginationAPI from '@/composables/useAsyncPaginationAPI' +import { onlyRefs } from '@/functs/onlyRefs' +import { RefOrRaw } from '@/interfaces/utils' +import { GroupModel, TranslatedGroupMember } from '@/models/group.model' +import { OrganizationModel } from '@/models/organization.model' + +const DEFAULT_CONFIG = {} + +export const getGroup = ( + organizationCode: RefOrRaw, + groupId: RefOrRaw, + config = {} +) => { + const { translateGroup } = useAutoTranslate() + const key = computed(() => `${unref(organizationCode)}::group::${unref(groupId)}`) + + return useAsyncAPI( + key, + () => fetchGetGroup(unref(organizationCode), unref(groupId), { ...DEFAULT_CONFIG }), + { + translate: translateGroup, + watch: onlyRefs([organizationCode, groupId]), + ...config, + } + ) +} + +export const getHierarchyGroups = (organizationCode: RefOrRaw) => { + const key = computed(() => `${unref(organizationCode)}::group::hierarchy`) + + return useAsyncAPI( + key, + () => fetchGetHierarchyGroups(unref(organizationCode), { ...DEFAULT_CONFIG }), + { + watch: onlyRefs([organizationCode]), + } + ) +} + +export const getGroupProject = ( + organizationCode: RefOrRaw, + groupId: RefOrRaw, + config = {} +) => { + const { translateProjects } = useAutoTranslate() + const key = computed(() => `${unref(organizationCode)}::group::${unref(groupId)}::projects`) + + return useAsyncPaginationAPI( + key, + ({ config }) => + fetchGetGroupProject(unref(organizationCode), unref(groupId), { + ...DEFAULT_CONFIG, + ...config, + }), + { + translate: translateProjects, + watch: onlyRefs([organizationCode, groupId]), + ...config, + } + ) +} + +export const getGroupMember = ( + organizationCode: RefOrRaw, + groupId: RefOrRaw, + config = {} +) => { + const { translateUsers } = useAutoTranslate() + const key = computed(() => `${unref(organizationCode)}::group::${unref(groupId)}::members`) + + return useAsyncPaginationAPI( + key, + ({ config }) => + fetchGetGroupMember(unref(organizationCode), unref(groupId), { + ...DEFAULT_CONFIG, + ...config, + }), + { + translate: (data) => translateUsers(data), + watch: onlyRefs([organizationCode, groupId]), + ...config, + } + ) +} diff --git a/src/app/router.options.ts b/src/app/router.options.ts index 8c831cd4..1db0c37e 100644 --- a/src/app/router.options.ts +++ b/src/app/router.options.ts @@ -223,7 +223,7 @@ const routes = ({ { path: '/create-group', name: 'createGroup', - component: () => import('../pages/CreateEditGroupPage/CreateEditGroupPage.vue'), + component: () => import('../pages/GroupPageV2/Tabs/GroupEditTab.vue'), meta: { resetScroll: true, diff --git a/src/app/useAdminPagesRoutes.ts b/src/app/useAdminPagesRoutes.ts index f40ae039..d5a963d1 100644 --- a/src/app/useAdminPagesRoutes.ts +++ b/src/app/useAdminPagesRoutes.ts @@ -103,7 +103,7 @@ export default function useAdminPagesRoutes() { { path: 'create', name: 'adminCreateGroup', - component: () => import('../pages/CreateEditGroupPage/CreateEditGroupPage.vue'), + component: () => import('../pages/GroupPageV2/Tabs/GroupEditTab.vue'), props: { postCancelRouteFactory: () => ({ name: 'groupsList' }), postCreateRouteFactory: () => ({ name: 'groupsList' }), @@ -120,7 +120,7 @@ export default function useAdminPagesRoutes() { postCreateRouteFactory: () => ({ name: 'groupsList' }), postUpdateRouteFactory: () => ({ name: 'groupsList' }), }), - component: () => import('../pages/CreateEditGroupPage/CreateEditGroupPage.vue'), + component: () => import('../pages/GroupPageV2/Tabs/GroupEditTab.vue'), }, ], }, diff --git a/src/app/useGroupPagesRoutes.ts b/src/app/useGroupPagesRoutes.ts index a88bc5b4..5c04bc56 100644 --- a/src/app/useGroupPagesRoutes.ts +++ b/src/app/useGroupPagesRoutes.ts @@ -15,12 +15,12 @@ export default function useGroupPagesRoutes() { { path: 'members', name: 'groupMembers', - component: () => import('../pages/GroupPageV2/Tabs/GroupMembersTab.vue'), + component: () => import('../pages/GroupPageV2/Tabs/Members/GroupMembersTab.vue'), }, { path: 'projects', name: 'groupProjects', - component: () => import('../pages/GroupPageV2/Tabs/GroupProjectsTab.vue'), + component: () => import('../pages/GroupPageV2/Tabs/Projects/GroupProjectsTab.vue'), }, // retro compat { @@ -36,17 +36,17 @@ export default function useGroupPagesRoutes() { isReducedMode: true, groupId: route.params.groupId, }), - component: () => import('../pages/CreateEditGroupPage/CreateEditGroupPage.vue'), + component: () => import('../pages/GroupPageV2/Tabs/GroupEditTab.vue'), }, { path: 'members/edit', name: 'groupMembersEdit', - component: () => import('../pages/GroupPageV2/Tabs/GroupMembersEditTab.vue'), + component: () => import('../pages/GroupPageV2/Tabs/Members/GroupMembersEditTab.vue'), }, { path: 'projects/edit', name: 'groupProjectsEdit', - component: () => import('../pages/GroupPageV2/Tabs/GroupProjectsEditTab.vue'), + component: () => import('../pages/GroupPageV2/Tabs/Projects/GroupProjectsEditTab.vue'), }, ], props: true, diff --git a/src/components/base/BasicCard.vue b/src/components/base/BasicCard.vue index f843e2f2..5e1dd99c 100644 --- a/src/components/base/BasicCard.vue +++ b/src/components/base/BasicCard.vue @@ -75,7 +75,7 @@ defineEmits<{ click: [] }>() } :deep(.picture) { - $picture-width: 72px; + $picture-width: 90px; display: flex; width: pxToRem($picture-width); diff --git a/src/components/base/CardList.vue b/src/components/base/CardList.vue index e150f22b..dffc6642 100644 --- a/src/components/base/CardList.vue +++ b/src/components/base/CardList.vue @@ -1,12 +1,12 @@
- +
- diff --git a/src/components/group/GroupsElement/GroupsElement.vue b/src/components/group/GroupsElement/GroupsElement.vue index afe1bb49..69ec3bd6 100644 --- a/src/components/group/GroupsElement/GroupsElement.vue +++ b/src/components/group/GroupsElement/GroupsElement.vue @@ -72,7 +72,7 @@ const showChild = ref(false) const showChildren = () => (showChild.value = !showChild.value) const goTo = (group) => { - router.push({ name: 'Group', params: { groupId: group.slug || group.id } }) + router.push({ name: 'Group', params: { groupId: group.id } }) } const addGroup = (group) => emit('add', group) const editGroup = (group) => emit('edit', group) diff --git a/src/components/group/SubGroups/SubGroups.vue b/src/components/group/SubGroups/SubGroups.vue index 62221b3d..003aab67 100644 --- a/src/components/group/SubGroups/SubGroups.vue +++ b/src/components/group/SubGroups/SubGroups.vue @@ -6,7 +6,7 @@
diff --git a/src/components/people/Researcher/ResearcherDocumentSimilars.vue b/src/components/people/Researcher/ResearcherDocumentSimilars.vue index f181209c..5a474af1 100644 --- a/src/components/people/Researcher/ResearcherDocumentSimilars.vue +++ b/src/components/people/Researcher/ResearcherDocumentSimilars.vue @@ -71,7 +71,7 @@ const getDocuments = (query) => { }) } -watch(pagination.query, (query) => getDocuments(query)) +watch(pagination.query, (query) => props.document && getDocuments(query)) watch( () => props.document, (doc) => doc && getDocuments(pagination.query()), diff --git a/src/components/project/ProjectListSkeleton.vue b/src/components/project/ProjectListSkeleton.vue index 87078755..cba5f51a 100644 --- a/src/components/project/ProjectListSkeleton.vue +++ b/src/components/project/ProjectListSkeleton.vue @@ -18,30 +18,14 @@ - diff --git a/src/pages/GroupPageV2/Tabs/BaseGroupPreview.vue b/src/pages/GroupPageV2/Tabs/BaseGroupPreview.vue new file mode 100644 index 00000000..03ea9e9b --- /dev/null +++ b/src/pages/GroupPageV2/Tabs/BaseGroupPreview.vue @@ -0,0 +1,25 @@ + + + diff --git a/src/pages/CreateEditGroupPage/CreateEditGroupPage.vue b/src/pages/GroupPageV2/Tabs/GroupEditTab.vue similarity index 81% rename from src/pages/CreateEditGroupPage/CreateEditGroupPage.vue rename to src/pages/GroupPageV2/Tabs/GroupEditTab.vue index 8a5bf6cf..303f6404 100644 --- a/src/pages/CreateEditGroupPage/CreateEditGroupPage.vue +++ b/src/pages/GroupPageV2/Tabs/GroupEditTab.vue @@ -1,4 +1,4 @@ -