diff --git a/packages/plugin-meetings-api/src/connectionResolver.ts b/packages/plugin-meetings-api/src/connectionResolver.ts index 820335fd650..bdafa2e1819 100644 --- a/packages/plugin-meetings-api/src/connectionResolver.ts +++ b/packages/plugin-meetings-api/src/connectionResolver.ts @@ -4,10 +4,13 @@ import { IMeetingDocument } from './models/definitions/meeting'; import { createGenerateModels } from '@erxes/api-utils/src/core'; import { ITopicModel, loadTopicClass } from './models/Topics'; import { ITopicDocument } from './models/definitions/topic'; +import { IPinnedUserDocument } from './models/definitions/pinnerUser'; +import { IPinnedUserModel, loadPinnedUserClass } from './models/pinnedUsers'; export interface IModels { Meetings: IMeetingModel; Topics: ITopicModel; + PinnedUsers: IPinnedUserModel; } export let models: IModels | null = null; @@ -24,6 +27,11 @@ export const loadClasses = (db: mongoose.Connection): IModels => { loadTopicClass(models) ); + models.PinnedUsers = db.model( + 'meeting_pinnedUsers', + loadPinnedUserClass(models) + ); + return models; }; diff --git a/packages/plugin-meetings-api/src/graphql/resolvers/customResolvers/index.ts b/packages/plugin-meetings-api/src/graphql/resolvers/customResolvers/index.ts index 26a4dbe0b94..aaaad40a28c 100644 --- a/packages/plugin-meetings-api/src/graphql/resolvers/customResolvers/index.ts +++ b/packages/plugin-meetings-api/src/graphql/resolvers/customResolvers/index.ts @@ -1,4 +1,6 @@ import Meeting from './meeting'; +import PinnedUsers from './pinnedUsers'; export default { - Meeting + Meeting, + PinnedUsers }; diff --git a/packages/plugin-meetings-api/src/graphql/resolvers/customResolvers/pinnedUsers.ts b/packages/plugin-meetings-api/src/graphql/resolvers/customResolvers/pinnedUsers.ts new file mode 100644 index 00000000000..b5620786e92 --- /dev/null +++ b/packages/plugin-meetings-api/src/graphql/resolvers/customResolvers/pinnedUsers.ts @@ -0,0 +1,11 @@ +export default { + async pinnedUsersInfo(pinnedUser) { + if (!pinnedUser.pinnedUserIds) return null; + return pinnedUser.pinnedUserIds.map(userId => { + return { + __typename: 'User', + _id: userId + }; + }); + } +}; diff --git a/packages/plugin-meetings-api/src/graphql/resolvers/index.ts b/packages/plugin-meetings-api/src/graphql/resolvers/index.ts index de58ab7e2d5..a854a4b201d 100644 --- a/packages/plugin-meetings-api/src/graphql/resolvers/index.ts +++ b/packages/plugin-meetings-api/src/graphql/resolvers/index.ts @@ -1,6 +1,6 @@ import customScalars from '@erxes/api-utils/src/customScalars'; -import { Meeting, Topic } from './mutations'; +import { Meeting, Topic, PinnedUser } from './mutations'; import Query from './queries'; import customResolvers from './customResolvers'; @@ -11,7 +11,8 @@ const resolvers: any = async () => ({ Mutation: { ...Meeting, - ...Topic + ...Topic, + ...PinnedUser }, Query }); diff --git a/packages/plugin-meetings-api/src/graphql/resolvers/mutations/index.ts b/packages/plugin-meetings-api/src/graphql/resolvers/mutations/index.ts index 219cc57025b..8739026ea30 100644 --- a/packages/plugin-meetings-api/src/graphql/resolvers/mutations/index.ts +++ b/packages/plugin-meetings-api/src/graphql/resolvers/mutations/index.ts @@ -1,4 +1,5 @@ import Meeting from './meeting'; import Topic from './topic'; +import PinnedUser from './pinnedUser'; -export { Meeting, Topic }; +export { Meeting, Topic, PinnedUser }; diff --git a/packages/plugin-meetings-api/src/graphql/resolvers/mutations/pinnedUser.ts b/packages/plugin-meetings-api/src/graphql/resolvers/mutations/pinnedUser.ts new file mode 100644 index 00000000000..17f7c55e8cc --- /dev/null +++ b/packages/plugin-meetings-api/src/graphql/resolvers/mutations/pinnedUser.ts @@ -0,0 +1,27 @@ +import { IContext } from '../../../messageBroker'; + +const pinnedUserMutations = { + // /** + // * Creates a new pinnedUser + // */ + async meetingPinnedUserAdd( + _root, + { pinnedUserIds }, + { models, user }: IContext + ) { + return await models.PinnedUsers.createPinnedUser(pinnedUserIds, user); + }, + + // /** + // * Edits a pinnedUser + // */ + async meetingPinnedUserEdit( + _root, + { pinnedUserIds }, + { models, user }: IContext + ) { + return models.PinnedUsers.updatePinnedUser(pinnedUserIds, user); + } +}; + +export default pinnedUserMutations; diff --git a/packages/plugin-meetings-api/src/graphql/resolvers/queries/index.ts b/packages/plugin-meetings-api/src/graphql/resolvers/queries/index.ts index d8eb8f0dd9e..5c96e982854 100644 --- a/packages/plugin-meetings-api/src/graphql/resolvers/queries/index.ts +++ b/packages/plugin-meetings-api/src/graphql/resolvers/queries/index.ts @@ -1,5 +1,7 @@ import meetingQueries from './meeting'; +import pinnedUserQueries from './pinnedUser'; export default { - ...meetingQueries + ...meetingQueries, + ...pinnedUserQueries }; diff --git a/packages/plugin-meetings-api/src/graphql/resolvers/queries/pinnedUser.ts b/packages/plugin-meetings-api/src/graphql/resolvers/queries/pinnedUser.ts new file mode 100644 index 00000000000..e895f4c7aa8 --- /dev/null +++ b/packages/plugin-meetings-api/src/graphql/resolvers/queries/pinnedUser.ts @@ -0,0 +1,10 @@ +import { paginate } from '@erxes/api-utils/src'; +import { IContext } from '../../../messageBroker'; + +const pinnedUserQueries = { + async meetingPinnedUsers(_root, {}, { models, user }: IContext) { + return await paginate(models.PinnedUsers.findOne({ userId: user._id }), {}); + } +}; + +export default pinnedUserQueries; diff --git a/packages/plugin-meetings-api/src/graphql/schema/pinnedUser.ts b/packages/plugin-meetings-api/src/graphql/schema/pinnedUser.ts new file mode 100644 index 00000000000..22c922e9426 --- /dev/null +++ b/packages/plugin-meetings-api/src/graphql/schema/pinnedUser.ts @@ -0,0 +1,11 @@ +const params = ` + pinnedUserIds: [String] +`; +export const mutations = ` + meetingPinnedUserAdd(${params}): PinnedUsers + meetingPinnedUserEdit(${params}): PinnedUsers + `; + +export const queries = ` + meetingPinnedUsers: PinnedUsers +`; diff --git a/packages/plugin-meetings-api/src/graphql/typeDefs.ts b/packages/plugin-meetings-api/src/graphql/typeDefs.ts index 989e6666582..6118737c9b5 100644 --- a/packages/plugin-meetings-api/src/graphql/typeDefs.ts +++ b/packages/plugin-meetings-api/src/graphql/typeDefs.ts @@ -1,6 +1,10 @@ import gql from 'graphql-tag'; import { mutations as meetingMutations, queries } from './schema/meeting'; import { mutations as topicMutations } from './schema/topic'; +import { + mutations as pinnedUserMutations, + queries as pinnedUserQueries +} from './schema/pinnedUser'; const types = ` type Topic { @@ -42,6 +46,12 @@ const types = ` dealIds: [String] deals: [Deal] } + + type PinnedUsers { + userId: String + pinnedUserIds: [String] + pinnedUsersInfo: [User] + } `; const typeDefs = async () => { @@ -53,11 +63,13 @@ const typeDefs = async () => { extend type Query { ${queries} + ${pinnedUserQueries} } extend type Mutation { ${meetingMutations} ${topicMutations} + ${pinnedUserMutations} } `; }; diff --git a/packages/plugin-meetings-api/src/models/definitions/pinnerUser.ts b/packages/plugin-meetings-api/src/models/definitions/pinnerUser.ts new file mode 100644 index 00000000000..dcf2acd161b --- /dev/null +++ b/packages/plugin-meetings-api/src/models/definitions/pinnerUser.ts @@ -0,0 +1,16 @@ +import { Schema, Document } from 'mongoose'; +import { field } from './utils'; + +export interface IPinnedUser { + userId: string; + pinnedUserIds: string; +} +export interface IPinnedUserDocument extends IPinnedUser, Document { + _id: String; +} + +export const pinnedUserSchema = new Schema({ + _id: field({ pkey: true }), + userId: field({ pkey: true }), + pinnedUserIds: field({ type: [String] }) +}); diff --git a/packages/plugin-meetings-api/src/models/pinnedUsers.ts b/packages/plugin-meetings-api/src/models/pinnedUsers.ts new file mode 100644 index 00000000000..3f3bc243746 --- /dev/null +++ b/packages/plugin-meetings-api/src/models/pinnedUsers.ts @@ -0,0 +1,43 @@ +import { Model } from 'mongoose'; +import { IModels } from '../connectionResolver'; +import { IUser } from '@erxes/api-utils/src/types'; +import { + IPinnedUserDocument, + pinnedUserSchema +} from './definitions/pinnerUser'; +import { checkLogin } from '@erxes/api-utils/src'; + +export interface IPinnedUserModel extends Model { + createPinnedUser( + pinnedUserIds: String[], + user: IUser + ): Promise; + updatePinnedUser( + pinnedUserIds: String[], + user: IUser + ): Promise; +} + +export const loadPinnedUserClass = (model: IModels) => { + class PinnedUser { + // create + public static async createPinnedUser(pinnedUserIds, user) { + return await model.PinnedUsers.create({ + pinnedUserIds, + userId: user._id + }); + } + + // update + public static async updatePinnedUser(pinnedUserIds, user) { + return await model.PinnedUsers.updateOne( + { userId: user._id }, + { $set: { pinnedUserIds } } + ).then(err => console.error(err)); + } + } + + pinnedUserSchema.loadClass(PinnedUser); + + return pinnedUserSchema; +}; diff --git a/packages/plugin-meetings-ui/src/components/List.tsx b/packages/plugin-meetings-ui/src/components/List.tsx index a27d5ee4e7d..af3b75d3509 100755 --- a/packages/plugin-meetings-ui/src/components/List.tsx +++ b/packages/plugin-meetings-ui/src/components/List.tsx @@ -76,7 +76,6 @@ function List(props: Props) { queryParams={queryParams} meetings={meetings} loading={loading} - participantUsers={participantUsers} /> ); break; diff --git a/packages/plugin-meetings-ui/src/components/myCalendar/ChooseOwnerForm.tsx b/packages/plugin-meetings-ui/src/components/myCalendar/ChooseOwnerForm.tsx new file mode 100644 index 00000000000..4c5580a9700 --- /dev/null +++ b/packages/plugin-meetings-ui/src/components/myCalendar/ChooseOwnerForm.tsx @@ -0,0 +1,74 @@ +import React, { useState } from 'react'; +import { Button, ControlLabel, Form, SelectTeamMembers } from '@erxes/ui/src'; +import FormGroup from '@erxes/ui/src/components/form/Group'; +import { ModalFooter } from '@erxes/ui/src/styles/main'; +import { IButtonMutateProps } from '@erxes/ui/src/types'; + +type Props = { + closeModal: () => void; + pinnedUserIds: string[]; + renderButton: (props: IButtonMutateProps) => JSX.Element; +}; +const ChooseOwnerForm = (props: Props) => { + const { pinnedUserIds } = props; + + const [pinnedIds, setPinnedUserIds] = useState([pinnedUserIds] || []); + + const generateDoc = values => { + const finalValues = values; + + if (pinnedIds) { + finalValues.pinnedUserIds = pinnedIds; + } + return { + ...finalValues + }; + }; + + const onUserSelect = users => { + setPinnedUserIds(users); + }; + + const renderContent = formProps => { + const { closeModal, renderButton } = props; + const { values, isSubmitted } = formProps; + const object = pinnedUserIds; + + return ( + <> + +
+ Team members +
+ +
+
+
+ + + + {renderButton({ + passedName: 'Pinned Users', + values: generateDoc(values), + isSubmitted, + callback: closeModal, + object: object + })} + + + ); + }; + + return
; +}; + +export default ChooseOwnerForm; diff --git a/packages/plugin-meetings-ui/src/components/myCalendar/SideBar.tsx b/packages/plugin-meetings-ui/src/components/myCalendar/SideBar.tsx index e3c18b9b061..138aaa0a2c0 100644 --- a/packages/plugin-meetings-ui/src/components/myCalendar/SideBar.tsx +++ b/packages/plugin-meetings-ui/src/components/myCalendar/SideBar.tsx @@ -4,16 +4,22 @@ import { colors } from '@erxes/ui/src/styles'; import { FieldStyle, SidebarList } from '@erxes/ui/src/layout/styles'; import React, { useState, useEffect } from 'react'; import { IMeeting } from '../../types'; -import { IUser, IUserConversation } from '@erxes/ui/src/auth/types'; +import { IUser } from '@erxes/ui/src/auth/types'; import { SidebarListItem } from '@erxes/ui-settings/src/styles'; import * as moment from 'moment'; -import FormControl from '@erxes/ui/src/components/form/Control'; -import { ChatListSearch, ParticipantList } from '../../styles'; +import { MeetingListSearch, ParticipantList } from '../../styles'; import dayjs from 'dayjs'; import { useHistory } from 'react-router-dom'; import Box from '@erxes/ui/src/components/Box'; import DataWithLoader from '@erxes/ui/src/components/DataWithLoader'; import { generateColorCode } from '../../utils'; +import Wrapper from '@erxes/ui/src/layout/components/Wrapper'; +import { Button, Icon } from '@erxes/ui/src/components'; +import { ModalTrigger } from '@erxes/ui/src'; +import FormControl from '@erxes/ui/src/components/form/Control'; +import { ChooseOwnerFormContainer } from '../../containers/myCalendar/ChooseOwnerForm'; + +const { Section } = Wrapper.Sidebar; type Props = { closeModal?: () => void; @@ -22,16 +28,23 @@ type Props = { queryParams: any; loading: boolean; participantUsers: IUser[]; + pinnedUsers: { + pinnedUserIds: string[]; + userId: string; + pinnedUsersInfo: IUser[]; + }; }; export const SideBar = (props: Props) => { - const { queryParams, meetings, loading, participantUsers } = props; + const { queryParams, meetings, loading, pinnedUsers } = props; const { meetingId } = queryParams; const [filteredMeeting, setFilteredMeeting] = useState(meetings); + const { pinnedUsersInfo } = pinnedUsers; + const [checkedUsers, setCheckedUsers] = useState( - queryParams.participantUserIds - ? queryParams.participantUserIds.split(',') - : [] + (queryParams.participantUserIds && + queryParams.participantUserIds.split(',')) || + [] ); const history = useHistory(); @@ -100,21 +113,6 @@ export const SideBar = (props: Props) => { }); }; - const otherMeetings = meetings => { - const today = moment(); // Get today's date - const tomorrow = moment().add(1, 'day'); // Get tomorrow's date - - return meetings.filter(meeting => { - const meetingDate = moment(meeting.startDate); - return ( - meeting.status !== 'completed' && - !meetingDate.isSame(today, 'day') && - meetingDate.isAfter(today) && - !meetingDate.isSame(tomorrow, 'day') - ); - }); - }; - const handleSearch = (event: any) => { setFilteredMeeting( meetings.filter(meeting => { @@ -128,14 +126,14 @@ export const SideBar = (props: Props) => { const handleChange = (e, userId: string) => { router.removeParams(history, meetingId); const isChecked = e.target.checked; - if (isChecked && !checkedUsers.includes(userId)) { + if (isChecked && !checkedUsers?.includes(userId)) { setCheckedUsers([...checkedUsers, userId]); const participantIds = [...checkedUsers, userId]; const queryString = 'participantUserIds=' + participantIds.join(','); return history.push(`${window.location.pathname}?${queryString}`); } else { - const uncheckedUser = checkedUsers.filter(user => user !== userId); + const uncheckedUser = checkedUsers?.filter(user => user !== userId); setCheckedUsers(uncheckedUser); const queryString = 'participantUserIds=' + uncheckedUser.join(','); @@ -143,15 +141,21 @@ export const SideBar = (props: Props) => { } }; + const clearUserFilter = () => { + router.setParams(history, { + searchUserValue: null + }); + }; + const data = ( - {participantUsers.map((user: any) => { + {pinnedUsersInfo.map((user: any) => { return ( handleChange(e, user._id)} - defaultChecked={checkedUsers.includes(user._id)} + defaultChecked={checkedUsers?.includes(user._id)} />   {user?.details?.fullName || user?.email} @@ -166,19 +170,50 @@ export const SideBar = (props: Props) => { ); })} + + + {router.getParam(history, 'searchUserValue') && ( + + )} + ); + const trigger = ( + + + + ); + + const renderForm = ({ closeModal }) => { + return ( + + ); + }; + + const extraButtons = ( + renderForm({ closeModal })} + title={`Add members`} + trigger={trigger} + /> + ); + return ( - + - + {todayMeetings(filteredMeeting)?.length > 0 && ( @@ -197,20 +232,18 @@ export const SideBar = (props: Props) => { )} - {otherMeetings(filteredMeeting)?.length > 0 && ( - - - {otherMeetings(filteredMeeting).map(meeting => { - return ListItem(meeting); - })} - - - )} - + + { const { meetingDetail, changeStatus } = props; - const { topics, deals } = meetingDetail; + const { topics = [], deals } = meetingDetail || {}; const { participantUser } = meetingDetail || {}; const renderTopicItem = (topic: ITopic) => { return ( -
+
Topic name:   - {topic.title} + {topic?.title} Description:   - {topic.description} + {topic?.description} @@ -48,7 +48,7 @@ export const MeetingDetail = (props: Props) => { Topic owner:   { participantUser?.find( - participant => participant._id === topic.ownerId + participant => participant._id === topic?.ownerId )?.details?.fullName } @@ -61,7 +61,7 @@ export const MeetingDetail = (props: Props) => { if (!topics || topics.length === 0) return ; - return topics.map((topic: ITopic) => renderTopicItem(topic)); + return topics?.map((topic: ITopic) => topic && renderTopicItem(topic)); }; const trigger = ( @@ -73,9 +73,9 @@ export const MeetingDetail = (props: Props) => { const modalContent = props => ( user._id)} - meetingStatus={meetingDetail.status} + meetingId={meetingDetail?._id} + participantUserIds={meetingDetail?.participantUser?.map(user => user._id)} + meetingStatus={meetingDetail?.status} /> ); @@ -94,8 +94,8 @@ export const MeetingDetail = (props: Props) => {   - {meetingDetail.startDate && - moment(meetingDetail.startDate).format( + {meetingDetail?.startDate && + moment(meetingDetail?.startDate).format( 'ddd, MMMM DD, YYYY • HH:mm a' )} @@ -117,12 +117,12 @@ export const MeetingDetail = (props: Props) => { Created By: - {' ' + meetingDetail.createdUser?.details?.fullName} + {' ' + meetingDetail?.createdUser?.details?.fullName} Team members:{' '} - {meetingDetail.participantUser?.map((user, index) => { - if (index != meetingDetail.participantUser?.length - 1) + {meetingDetail?.participantUser?.map((user, index) => { + if (index != meetingDetail?.participantUser?.length - 1) return <>{user.details?.fullName},; return <>{user.details?.fullName}; })} @@ -144,12 +144,12 @@ export const MeetingDetail = (props: Props) => { -

{meetingDetail.description}

+

{meetingDetail?.description}

Meeting Agenda: - {meetingDetail.status !== 'completed' && renderAddButton} + {meetingDetail?.status !== 'completed' && renderAddButton} {renderMeetingAgenda()} @@ -158,15 +158,15 @@ export const MeetingDetail = (props: Props) => { return ( -

{meetingDetail.title}

+

{meetingDetail?.title}

{renderTabContent()} - {meetingDetail.status !== 'completed' && ( + {meetingDetail?.status !== 'completed' && ( diff --git a/packages/plugin-meetings-ui/src/components/myCalendar/meeting/Form.tsx b/packages/plugin-meetings-ui/src/components/myCalendar/meeting/Form.tsx index 7374b603160..8e77cbe4bfa 100644 --- a/packages/plugin-meetings-ui/src/components/myCalendar/meeting/Form.tsx +++ b/packages/plugin-meetings-ui/src/components/myCalendar/meeting/Form.tsx @@ -41,11 +41,13 @@ export const MeetingForm = (props: Props) => { const { companies } = companiesQuery || {}; const { deals } = dealsQuery || {}; + let dealInitialId = dealId ? [dealId] : ''; + const [userIds, setUserIds] = useState([props.currentUser._id] || []); const [companyId, setCompanyId] = useState(''); const [title, setTitle] = useState(''); const [selectedMethod, setSelectedMethod] = useState(''); - const [dealIds, setDealIds] = useState([dealId] || []); + const [dealIds, setDealIds] = useState(dealInitialId); const [startDate, setStartDate] = useState( calendarDate?.startDate || new Date() @@ -67,7 +69,7 @@ export const MeetingForm = (props: Props) => { endDate: string | Date; companyId: string; method: string; - dealIds: string[]; + dealIds: string[] | string; }) => { const finalValues = values; @@ -90,7 +92,7 @@ export const MeetingForm = (props: Props) => { if (selectedMethod) { finalValues.method = selectedMethod; } - if (dealIds) { + if (dealIds && dealIds.length > 0) { finalValues.dealIds = dealIds; } diff --git a/packages/plugin-meetings-ui/src/components/myCalendar/topic/Form.tsx b/packages/plugin-meetings-ui/src/components/myCalendar/topic/Form.tsx index 5287e437926..0623dff4f5d 100644 --- a/packages/plugin-meetings-ui/src/components/myCalendar/topic/Form.tsx +++ b/packages/plugin-meetings-ui/src/components/myCalendar/topic/Form.tsx @@ -58,7 +58,7 @@ export const TopicForm = (props: Props) => { const { topic, renderButton, closeModal } = props; const { values, isSubmitted } = formProps; return ( - <> +
Topic name { })} )} - +
); }; diff --git a/packages/plugin-meetings-ui/src/components/myCalendar/topic/List.tsx b/packages/plugin-meetings-ui/src/components/myCalendar/topic/List.tsx deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/packages/plugin-meetings-ui/src/containers/List.tsx b/packages/plugin-meetings-ui/src/containers/List.tsx index 969b2173051..f86bc9e7894 100755 --- a/packages/plugin-meetings-ui/src/containers/List.tsx +++ b/packages/plugin-meetings-ui/src/containers/List.tsx @@ -18,7 +18,6 @@ import { queries as userQueries } from '@erxes/ui/src/team/graphql'; type Props = { history: any; - searchFilter: string; queryParams: any; route?: string; perPage?: number; diff --git a/packages/plugin-meetings-ui/src/containers/myCalendar/ChooseOwnerForm.tsx b/packages/plugin-meetings-ui/src/containers/myCalendar/ChooseOwnerForm.tsx new file mode 100644 index 00000000000..af8d310a6f8 --- /dev/null +++ b/packages/plugin-meetings-ui/src/containers/myCalendar/ChooseOwnerForm.tsx @@ -0,0 +1,44 @@ +import React from 'react'; + +import { mutations } from '../../graphql'; +import ChooseOwnerForm from '../../components/myCalendar/ChooseOwnerForm'; +import { IButtonMutateProps } from '@erxes/ui/src/types'; +import { ButtonMutate } from '@erxes/ui/src'; + +type Props = { + closeModal: () => void; + pinnedUserIds: string[]; +}; +export const ChooseOwnerFormContainer = (props: Props) => { + const renderButton = ({ + passedName, + values, + isSubmitted, + callback, + object + }: IButtonMutateProps) => { + return ( + + ); + }; + + const updatedProps = { + ...props, + renderButton + }; + return ; +}; diff --git a/packages/plugin-meetings-ui/src/containers/myCalendar/SideBar.tsx b/packages/plugin-meetings-ui/src/containers/myCalendar/SideBar.tsx index 322f3a0280a..4d4130a2d59 100644 --- a/packages/plugin-meetings-ui/src/containers/myCalendar/SideBar.tsx +++ b/packages/plugin-meetings-ui/src/containers/myCalendar/SideBar.tsx @@ -1,7 +1,10 @@ import React from 'react'; import { IMeeting } from '../../types'; import SideBar from '../../components/myCalendar/SideBar'; -import { IUser } from '@erxes/ui/src/auth/types'; +import { gql, useQuery } from '@apollo/client'; +import { queries as userQueries } from '@erxes/ui/src/team/graphql'; +import { Spinner } from '@erxes/ui/src/components'; +import { queries } from '../../graphql'; type Props = { history: any; @@ -9,14 +12,27 @@ type Props = { queryParams: any; meetings: IMeeting[]; loading: boolean; - participantUsers: IUser[]; }; const SideBarContainer = (props: Props) => { // calls gql mutation for edit/add type + const { queryParams } = props; + const { searchUserValue } = queryParams; + const { data, loading } = useQuery(gql(userQueries.users), { + variables: { perPage: 10, searchValue: searchUserValue } + }); + const { data: pinnedUsers, loading: pinnedUserLoading } = useQuery( + gql(queries.meetingPinnedUsers) + ); + + if (loading || pinnedUserLoading) { + return ; + } const updatedProps = { - ...props + ...props, + participantUsers: data.users, + pinnedUsers: pinnedUsers.meetingPinnedUsers }; return ; }; diff --git a/packages/plugin-meetings-ui/src/containers/myCalendar/meeting/Detail.tsx b/packages/plugin-meetings-ui/src/containers/myCalendar/meeting/Detail.tsx index 1b88cadea37..ffdc2dde2f8 100644 --- a/packages/plugin-meetings-ui/src/containers/myCalendar/meeting/Detail.tsx +++ b/packages/plugin-meetings-ui/src/containers/myCalendar/meeting/Detail.tsx @@ -55,7 +55,10 @@ const MeetingDetailContainer = (props: FinalProps) => { } const updatedProps = { - meetingDetail: meetingDetailQuery && meetingDetailQuery.meetingDetail, + meetingDetail: + meetingDetailQuery && + meetingDetailQuery.meetingDetail && + meetingDetailQuery.meetingDetail, changeStatus, meetings: data?.meetings }; diff --git a/packages/plugin-meetings-ui/src/graphql/mutations.ts b/packages/plugin-meetings-ui/src/graphql/mutations.ts index b7219267eda..2e22edf2f1b 100644 --- a/packages/plugin-meetings-ui/src/graphql/mutations.ts +++ b/packages/plugin-meetings-ui/src/graphql/mutations.ts @@ -58,11 +58,29 @@ const editTopic = ` } `; +const editPinnedUser = ` + mutation meetingPinnedUserEdit($pinnedUserIds: [String]) { + meetingPinnedUserEdit(pinnedUserIds: $pinnedUserIds) { + userId + pinnedUserIds + } +} + `; +const addPinnedUser = ` + mutation meetingPinnedUserAdd($pinnedUserIds: [String]) { + meetingPinnedUserAdd(pinnedUserIds: $pinnedUserIds) { + userId + pinnedUserIds + } +}`; + export default { addTopic, editTopic, addMeeting, remove, editMeeting, - editMeetingStatus + editMeetingStatus, + editPinnedUser, + addPinnedUser }; diff --git a/packages/plugin-meetings-ui/src/graphql/queries.ts b/packages/plugin-meetings-ui/src/graphql/queries.ts index c88fb3ce181..d5fbf295974 100644 --- a/packages/plugin-meetings-ui/src/graphql/queries.ts +++ b/packages/plugin-meetings-ui/src/graphql/queries.ts @@ -117,8 +117,15 @@ query meetingsTotalCount{ const meetingPinnedUsers = ` query meetingPinnedUsers { meetingPinnedUsers { - pinnedUserIds + pinnedUserIds userId + pinnedUsersInfo{ + _id + email + details { + fullName + } + } } }`; diff --git a/packages/plugin-meetings-ui/src/styles.ts b/packages/plugin-meetings-ui/src/styles.ts index 32e7e272f6e..edb9f592575 100644 --- a/packages/plugin-meetings-ui/src/styles.ts +++ b/packages/plugin-meetings-ui/src/styles.ts @@ -2,7 +2,7 @@ import styled from 'styled-components'; import styledTS from 'styled-components-ts'; import { colors, dimensions, typography } from '@erxes/ui/src/styles'; -export const ChatListSearch = styled.div` +export const MeetingListSearch = styled.div` padding: 0 ${dimensions.coreSpacing}px; margin-bottom: ${dimensions.coreSpacing}px; margin-top: ${dimensions.coreSpacing}px;