Affichage des dossiers associés dans la page groupe de travail

This commit is contained in:
wpetit 2020-10-12 14:56:22 +02:00
parent 19f0c8e0a4
commit f032e83e71
8 changed files with 62 additions and 8 deletions

View File

@ -1,6 +1,6 @@
import React from 'react'; import React from 'react';
import { DecisionSupportFile, DecisionSupportFileStatus } from '../../types/decision'; import { DecisionSupportFile, DecisionSupportFileStatus } from '../../types/decision';
import { ItemPanel, TabDefinition, Item } from './ItemPanel'; import { ItemPanel, TabDefinition, Item } from '../ItemPanel';
import { useUserProfile } from '../../gql/queries/profile'; import { useUserProfile } from '../../gql/queries/profile';
import { inWorkgroup } from '../../types/workgroup'; import { inWorkgroup } from '../../types/workgroup';
import { useDecisionSupportFiles } from '../../gql/queries/dsf'; import { useDecisionSupportFiles } from '../../gql/queries/dsf';

View File

@ -2,7 +2,7 @@ import React, { } from 'react';
import { Workgroup, inWorkgroup } from '../../types/workgroup'; import { Workgroup, inWorkgroup } from '../../types/workgroup';
import { useWorkgroups } from '../../gql/queries/workgroups'; import { useWorkgroups } from '../../gql/queries/workgroups';
import { useUserProfile } from '../../gql/queries/profile'; import { useUserProfile } from '../../gql/queries/profile';
import { ItemPanel, Item } from './ItemPanel'; import { ItemPanel, Item } from '../ItemPanel';
export function WorkgroupsPanel() { export function WorkgroupsPanel() {
const { workgroups } = useWorkgroups(); const { workgroups } = useWorkgroups();

View File

@ -4,7 +4,7 @@ import { useWorkgroups } from "../gql/queries/workgroups";
import { useDecisionSupportFiles } from "../gql/queries/dsf"; import { useDecisionSupportFiles } from "../gql/queries/dsf";
export interface DecisioSupportFileLinkProps { export interface DecisioSupportFileLinkProps {
decisionSupportFileId: number decisionSupportFileId: number|string
} }
export const DecisionSupportFileLink: FunctionComponent<DecisioSupportFileLinkProps> = ({ decisionSupportFileId }) => { export const DecisionSupportFileLink: FunctionComponent<DecisioSupportFileLinkProps> = ({ decisionSupportFileId }) => {

View File

@ -1,6 +1,6 @@
import React, { FunctionComponent, useState, useEffect } from "react"; import React, { FunctionComponent, useState, useEffect } from "react";
import { Link } from "react-router-dom"; import { Link } from "react-router-dom";
import { WithLoader } from "../WithLoader"; import { WithLoader } from "./WithLoader";
export interface Item { export interface Item {
id: string id: string

View File

@ -0,0 +1,48 @@
import React, { FunctionComponent } from 'react';
import { Link } from 'react-router-dom';
import { useDecisionSupportFiles } from '../../gql/queries/dsf';
import { DecisionSupportFile } from '../../types/decision';
import { User } from '../../types/user';
import { DecisionSupportFileLink } from '../DecisionSupportFileLink';
import { WorkgroupLink } from '../WorkgroupLink';
export interface DecisionSupportFilePanelProps {
workgroupId: string
}
export const DecisionSupportFilePanel: FunctionComponent<DecisionSupportFilePanelProps> = ({ workgroupId }) => {
const { decisionSupportFiles } = useDecisionSupportFiles({
variables: {
filter: {
workgroups: [workgroupId],
}
}
})
return (
<nav className="panel">
<p className="panel-heading">
Dossiers d'aide à la décision
</p>
{
decisionSupportFiles.map((dsf: DecisionSupportFile) => {
return (
<Link to={`/decisions/${dsf.id}`} key={`dsf-${dsf.id}`} className="panel-block">
<span className="panel-icon">
<i className="fas fa-file" aria-hidden="true"></i>
</span>
<span>{dsf.title}</span>
</Link>
);
})
}
{
decisionSupportFiles.length === 0 ?
<a className="panel-block has-text-centered is-block">
<p className="is-italic">Aucun dossier pour l'instant.</p>
</a> :
null
}
</nav>
);
}

View File

@ -1,18 +1,18 @@
import React, { useEffect, useState, Fragment } from 'react'; import React, { useEffect, useState, Fragment } from 'react';
import { Page } from '../Page'; import { Page } from '../Page';
import { WithLoader } from '../WithLoader';
import { useParams } from 'react-router'; import { useParams } from 'react-router';
import { useWorkgroupsQuery, useWorkgroups } from '../../gql/queries/workgroups'; import { useWorkgroups } from '../../gql/queries/workgroups';
import { useUserProfileQuery, useUserProfile } from '../../gql/queries/profile'; import { useUserProfile } from '../../gql/queries/profile';
import { MembersPanel } from './MembersPanel'; import { MembersPanel } from './MembersPanel';
import { User } from '../../types/user'; import { User } from '../../types/user';
import { InfoPanel } from './InfoPanel'; import { InfoPanel } from './InfoPanel';
import { Workgroup } from '../../types/workgroup'; import { Workgroup } from '../../types/workgroup';
import { useJoinWorkgroupMutation, useLeaveWorkgroupMutation, useCloseWorkgroupMutation } from '../../gql/mutations/workgroups'; import { useJoinWorkgroupMutation, useLeaveWorkgroupMutation, useCloseWorkgroupMutation } from '../../gql/mutations/workgroups';
import { TimelinePanel } from './TimelinePanel'; import { TimelinePanel } from './TimelinePanel';
import { DecisionSupportFilePanel } from './DecisionSupportFilePanel';
export function WorkgroupPage() { export function WorkgroupPage() {
const { id } = useParams(); const { id } = useParams<any>();
const { workgroups } = useWorkgroups({ const { workgroups } = useWorkgroups({
variables:{ variables:{
filter: { filter: {
@ -140,6 +140,7 @@ export function WorkgroupPage() {
</div> </div>
<div className="column is-4"> <div className="column is-4">
<MembersPanel users={state.workgroup.members as User[]} /> <MembersPanel users={state.workgroup.members as User[]} />
<DecisionSupportFilePanel workgroupId={state.workgroup.id} />
</div> </div>
<div className="column is-4"> <div className="column is-4">
<TimelinePanel workgroup={state.workgroup} /> <TimelinePanel workgroup={state.workgroup} />

View File

@ -46,6 +46,7 @@ type DecisionSupportFile {
input DecisionSupportFileFilter { input DecisionSupportFileFilter {
ids: [ID] ids: [ID]
workgroups: [ID]
} }
input AuthorizationObject { input AuthorizationObject {

View File

@ -108,6 +108,10 @@ func (r *DSFRepository) Search(ctx context.Context, filter *DecisionSupportFileF
if filter.Ids != nil { if filter.Ids != nil {
query = query.Where("id in (?)", filter.Ids) query = query.Where("id in (?)", filter.Ids)
} }
if filter.Workgroups != nil {
query = query.Where("workgroup_id in (?)", filter.Workgroups)
}
} }
dsfs := make([]*DecisionSupportFile, 0) dsfs := make([]*DecisionSupportFile, 0)