diff --git a/app/definitions/ICannedResponse.ts b/app/definitions/ICannedResponse.ts index fcf531c0c..d7d9fd347 100644 --- a/app/definitions/ICannedResponse.ts +++ b/app/definitions/ICannedResponse.ts @@ -1,23 +1,3 @@ -export interface IDepartment { - _id: string; - enabled: boolean; - name: string; - description: string; - showOnRegistration: boolean; - showOnOfflineForm: boolean; - requestTagBeforeClosingChat: boolean; - email: string; - chatClosingTags: string[]; - offlineMessageChannelName: string; - maxNumberSimultaneousChat: number; - abandonedRoomsCloseCustomMessage: string; - waitingQueueMessage: string; - departmentsAllowedToForward: string; - _updatedAt: Date; - numAgents: number; - ancestors: string[]; -} - export interface ICannedResponse { _id: string; shortcut: string; diff --git a/app/definitions/ILivechatDepartment.ts b/app/definitions/ILivechatDepartment.ts index a3e67e9f2..beb54bfb0 100644 --- a/app/definitions/ILivechatDepartment.ts +++ b/app/definitions/ILivechatDepartment.ts @@ -13,6 +13,11 @@ export interface ILivechatDepartment { _updatedAt?: Date; businessHourId?: string; fallbackForwardDepartment?: string; + maxNumberSimultaneousChat: number; + abandonedRoomsCloseCustomMessage: string; + waitingQueueMessage: string; + departmentsAllowedToForward: string; + ancestors: string[]; // extra optional fields [k: string]: any; } diff --git a/app/views/CannedResponsesListView/Dropdown/DropdownItemFilter.tsx b/app/views/CannedResponsesListView/Dropdown/DropdownItemFilter.tsx index a2d68c528..fa165c67c 100644 --- a/app/views/CannedResponsesListView/Dropdown/DropdownItemFilter.tsx +++ b/app/views/CannedResponsesListView/Dropdown/DropdownItemFilter.tsx @@ -1,12 +1,12 @@ import React from 'react'; -import { IDepartment } from '../../../definitions/ICannedResponse'; +import { ILivechatDepartment } from '../../../definitions/ILivechatDepartment'; import DropdownItem from './DropdownItem'; interface IDropdownItemFilter { - currentDepartment: IDepartment; - value: IDepartment; - onPress: (value: IDepartment) => void; + currentDepartment: ILivechatDepartment; + value: ILivechatDepartment; + onPress: (value: ILivechatDepartment) => void; } const DropdownItemFilter = ({ currentDepartment, value, onPress }: IDropdownItemFilter): JSX.Element => ( diff --git a/app/views/CannedResponsesListView/Dropdown/DropdownItemHeader.tsx b/app/views/CannedResponsesListView/Dropdown/DropdownItemHeader.tsx index ecfa95e8a..5ebcaf860 100644 --- a/app/views/CannedResponsesListView/Dropdown/DropdownItemHeader.tsx +++ b/app/views/CannedResponsesListView/Dropdown/DropdownItemHeader.tsx @@ -1,14 +1,14 @@ import React from 'react'; -import { IDepartment } from '../../../definitions/ICannedResponse'; +import { ILivechatDepartment } from '../../../definitions/ILivechatDepartment'; import DropdownItem from './DropdownItem'; interface IDropdownItemHeader { - department: IDepartment; + department: ILivechatDepartment; onPress: () => void; } -const DropdownItemHeader = ({ department, onPress }: IDropdownItemHeader): JSX.Element => ( +const DropdownItemHeader = ({ department, onPress }: IDropdownItemHeader): React.ReactElement => ( ); diff --git a/app/views/CannedResponsesListView/Dropdown/index.tsx b/app/views/CannedResponsesListView/Dropdown/index.tsx index 8ef425676..58dc52dd3 100644 --- a/app/views/CannedResponsesListView/Dropdown/index.tsx +++ b/app/views/CannedResponsesListView/Dropdown/index.tsx @@ -6,19 +6,19 @@ import styles from '../styles'; import { themes } from '../../../lib/constants'; import { TSupportedThemes, withTheme } from '../../../theme'; import * as List from '../../../containers/List'; -import { IDepartment } from '../../../definitions/ICannedResponse'; import DropdownItemFilter from './DropdownItemFilter'; import DropdownItemHeader from './DropdownItemHeader'; import { ROW_HEIGHT } from './DropdownItem'; +import { ILivechatDepartment } from '../../../definitions/ILivechatDepartment'; const ANIMATION_DURATION = 200; interface IDropdownProps { theme?: TSupportedThemes; - currentDepartment: IDepartment; + currentDepartment: ILivechatDepartment; onClose: () => void; - onDepartmentSelected: (value: IDepartment) => void; - departments: IDepartment[]; + onDepartmentSelected: (value: ILivechatDepartment) => void; + departments: ILivechatDepartment[]; } class Dropdown extends React.Component { diff --git a/app/views/CannedResponsesListView/index.tsx b/app/views/CannedResponsesListView/index.tsx index fc8184551..33ae96d09 100644 --- a/app/views/CannedResponsesListView/index.tsx +++ b/app/views/CannedResponsesListView/index.tsx @@ -25,11 +25,13 @@ import CannedResponseItem from './CannedResponseItem'; import Dropdown from './Dropdown'; import DropdownItemHeader from './Dropdown/DropdownItemHeader'; import styles from './styles'; -import { ICannedResponse, IDepartment } from '../../definitions/ICannedResponse'; +import { ICannedResponse } from '../../definitions/ICannedResponse'; import { ChatsStackParamList } from '../../stacks/types'; import { ISubscription } from '../../definitions/ISubscription'; import { getRoomTitle, getUidDirectMessage } from '../../lib/methods'; import { Services } from '../../lib/services'; +import { IApplicationState } from '../../definitions'; +import { ILivechatDepartment } from '../../definitions/ILivechatDepartment'; const COUNT = 25; @@ -46,7 +48,7 @@ const fixedScopes = [ _id: 'user', name: I18n.t('Private') } -] as IDepartment[]; +] as ILivechatDepartment[]; interface ICannedResponsesListViewProps { navigation: StackNavigationProp; @@ -58,7 +60,7 @@ const CannedResponsesListView = ({ navigation, route }: ICannedResponsesListView const [cannedResponses, setCannedResponses] = useState([]); const [cannedResponsesScopeName, setCannedResponsesScopeName] = useState([]); - const [departments, setDepartments] = useState([]); + const [departments, setDepartments] = useState([]); // states used by the filter in Header and Dropdown const [isSearching, setIsSearching] = useState(false); @@ -74,8 +76,8 @@ const CannedResponsesListView = ({ navigation, route }: ICannedResponsesListView const insets = useSafeAreaInsets(); const { theme } = useTheme(); - const { isMasterDetail } = useSelector((state: any) => state.app); - const { rooms } = useSelector((state: any) => state.room); + const isMasterDetail = useSelector((state: IApplicationState) => state.app.isMasterDetail); + const rooms = useSelector((state: IApplicationState) => state.room.rooms); const getRoomFromDb = async () => { const { rid } = route.params; @@ -92,9 +94,9 @@ const CannedResponsesListView = ({ navigation, route }: ICannedResponsesListView const getDepartments = debounce(async () => { try { - const res: any = await Services.getDepartments(); + const res = await Services.getDepartments(); if (res.success) { - setDepartments([...fixedScopes, ...res.departments]); + setDepartments([...fixedScopes, ...(res.departments as ILivechatDepartment[])]); } } catch (e) { setDepartments(fixedScopes); @@ -119,7 +121,7 @@ const CannedResponsesListView = ({ navigation, route }: ICannedResponsesListView t: room.t, fname: name }), - t: room.t as any, + t: room.t, roomUserId: getUidDirectMessage(room), usedCannedResponse: item.text }; @@ -214,7 +216,7 @@ const CannedResponsesListView = ({ navigation, route }: ICannedResponsesListView searchCallback(text, scope, departmentId); }; - const onDepartmentSelect = (value: IDepartment) => { + const onDepartmentSelect = (value: ILivechatDepartment) => { let department = ''; let depId = '';