@webex/cc-task 1.28.0-ccwidgets.12 → 1.28.0-ccwidgets.120
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +3892 -506
- package/dist/index.js.LICENSE.txt +11 -0
- package/dist/types/CallControlCAD/index.d.ts +4 -0
- package/dist/types/OutdialCall/index.d.ts +3 -0
- package/dist/types/TaskList/index.d.ts +2 -1
- package/dist/types/Utils/task-util.d.ts +24 -0
- package/dist/types/helper.d.ts +68 -10
- package/dist/types/index.d.ts +3 -1
- package/dist/types/task.types.d.ts +13 -156
- package/package.json +22 -16
- package/dist/types/CallControl/call-control.presentational.d.ts +0 -5
- package/dist/types/IncomingTask/incoming-task.presentational.d.ts +0 -4
- package/dist/types/TaskList/task-list.presentational.d.ts +0 -4
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/*! For license information please see index.js.LICENSE.txt */
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* @license React
|
|
5
|
+
* use-sync-external-store-shim.production.js
|
|
6
|
+
*
|
|
7
|
+
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
8
|
+
*
|
|
9
|
+
* This source code is licensed under the MIT license found in the
|
|
10
|
+
* LICENSE file in the root directory of this source tree.
|
|
11
|
+
*/
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { ILogger } from '@webex/cc-store';
|
|
2
|
+
import { ITask } from '@webex/contact-center';
|
|
3
|
+
/**
|
|
4
|
+
* This function determines the visibility of various controls based on the task's data.
|
|
5
|
+
* @param task The task object
|
|
6
|
+
* @returns An object containing the visibility of various controls based on the task's data
|
|
7
|
+
*/
|
|
8
|
+
export declare function getControlsVisibility(deviceType: string, featureFlags: {
|
|
9
|
+
[key: string]: boolean;
|
|
10
|
+
}, task: ITask, logger?: ILogger): {
|
|
11
|
+
accept: boolean;
|
|
12
|
+
decline: boolean;
|
|
13
|
+
end: boolean;
|
|
14
|
+
muteUnmute: boolean;
|
|
15
|
+
holdResume: boolean;
|
|
16
|
+
consult: boolean;
|
|
17
|
+
transfer: boolean;
|
|
18
|
+
conference: boolean;
|
|
19
|
+
wrapup: boolean;
|
|
20
|
+
pauseResumeRecording: boolean;
|
|
21
|
+
endConsult: boolean;
|
|
22
|
+
recordingIndicator: boolean;
|
|
23
|
+
};
|
|
24
|
+
export declare function findHoldTimestamp(interaction: Interaction, mType?: string, logger?: ILogger): number | null;
|
package/dist/types/helper.d.ts
CHANGED
|
@@ -1,25 +1,83 @@
|
|
|
1
|
-
import { ITask } from '@webex/
|
|
2
|
-
import { useCallControlProps, UseTaskListProps, UseTaskProps } from './task.types';
|
|
1
|
+
import { ITask } from '@webex/contact-center';
|
|
2
|
+
import { useCallControlProps, UseTaskListProps, UseTaskProps, useOutdialCallProps } from './task.types';
|
|
3
|
+
import { BuddyDetails, DestinationType, ContactServiceQueue, PaginatedListParams } from '@webex/cc-store';
|
|
4
|
+
import { OutdialAniEntriesResponse } from '@webex/contact-center/dist/types/services/config/types';
|
|
3
5
|
export declare const useTaskList: (props: UseTaskListProps) => {
|
|
4
|
-
taskList: ITask
|
|
6
|
+
taskList: Record<string, ITask>;
|
|
5
7
|
acceptTask: (task: ITask) => void;
|
|
6
8
|
declineTask: (task: ITask) => void;
|
|
9
|
+
onTaskSelect: (task: ITask) => void;
|
|
7
10
|
isBrowser: boolean;
|
|
8
11
|
};
|
|
9
12
|
export declare const useIncomingTask: (props: UseTaskProps) => {
|
|
10
|
-
incomingTask:
|
|
11
|
-
isAnswered: boolean;
|
|
12
|
-
isEnded: boolean;
|
|
13
|
+
incomingTask: ITask;
|
|
13
14
|
accept: () => void;
|
|
14
|
-
|
|
15
|
+
reject: () => void;
|
|
15
16
|
isBrowser: boolean;
|
|
16
17
|
};
|
|
17
18
|
export declare const useCallControl: (props: useCallControlProps) => {
|
|
18
19
|
currentTask: ITask;
|
|
19
|
-
audioRef: import("react").MutableRefObject<HTMLAudioElement>;
|
|
20
20
|
endCall: () => void;
|
|
21
21
|
toggleHold: (hold: boolean) => void;
|
|
22
|
-
toggleRecording: (
|
|
22
|
+
toggleRecording: () => void;
|
|
23
|
+
toggleMute: () => Promise<void>;
|
|
24
|
+
isMuted: boolean;
|
|
23
25
|
wrapupCall: (wrapUpReason: string, auxCodeId: string) => void;
|
|
24
|
-
|
|
26
|
+
isHeld: boolean;
|
|
27
|
+
setIsHeld: import("react").Dispatch<import("react").SetStateAction<boolean>>;
|
|
28
|
+
isRecording: boolean;
|
|
29
|
+
setIsRecording: import("react").Dispatch<import("react").SetStateAction<boolean>>;
|
|
30
|
+
buddyAgents: BuddyDetails[];
|
|
31
|
+
loadBuddyAgents: () => Promise<void>;
|
|
32
|
+
queues: ContactServiceQueue[];
|
|
33
|
+
loadQueues: () => Promise<void>;
|
|
34
|
+
transferCall: (to: string, type: DestinationType) => Promise<void>;
|
|
35
|
+
consultCall: (consultDestination: string, destinationType: DestinationType) => Promise<void>;
|
|
36
|
+
endConsultCall: () => Promise<void>;
|
|
37
|
+
consultTransfer: () => Promise<void>;
|
|
38
|
+
consultAgentName: string;
|
|
39
|
+
setConsultAgentName: import("react").Dispatch<import("react").SetStateAction<string>>;
|
|
40
|
+
consultAgentId: string;
|
|
41
|
+
setConsultAgentId: import("react").Dispatch<import("react").SetStateAction<string>>;
|
|
42
|
+
holdTime: number;
|
|
43
|
+
startTimestamp: number;
|
|
44
|
+
lastTargetType: "agent" | "queue";
|
|
45
|
+
setLastTargetType: import("react").Dispatch<import("react").SetStateAction<"agent" | "queue">>;
|
|
46
|
+
controlVisibility: {
|
|
47
|
+
accept: boolean;
|
|
48
|
+
decline: boolean;
|
|
49
|
+
end: boolean;
|
|
50
|
+
muteUnmute: boolean;
|
|
51
|
+
holdResume: boolean;
|
|
52
|
+
consult: boolean;
|
|
53
|
+
transfer: boolean;
|
|
54
|
+
conference: boolean;
|
|
55
|
+
wrapup: boolean;
|
|
56
|
+
pauseResumeRecording: boolean;
|
|
57
|
+
endConsult: boolean;
|
|
58
|
+
recordingIndicator: boolean;
|
|
59
|
+
};
|
|
60
|
+
secondsUntilAutoWrapup: number;
|
|
61
|
+
cancelAutoWrapup: () => void;
|
|
62
|
+
getAddressBookEntries: ({ page, pageSize, search }: PaginatedListParams) => Promise<import("@webex/contact-center").AddressBookEntriesResponse>;
|
|
63
|
+
getEntryPoints: ({ page, pageSize, search }: PaginatedListParams) => Promise<import("@webex/contact-center").EntryPointListResponse>;
|
|
64
|
+
getQueuesFetcher: ({ page, pageSize, search }: PaginatedListParams) => Promise<{
|
|
65
|
+
data: ContactServiceQueue[];
|
|
66
|
+
meta: {
|
|
67
|
+
page: number;
|
|
68
|
+
pageSize: number;
|
|
69
|
+
total: number;
|
|
70
|
+
totalPages: number;
|
|
71
|
+
};
|
|
72
|
+
} | {
|
|
73
|
+
data: any[];
|
|
74
|
+
meta: {
|
|
75
|
+
page: number;
|
|
76
|
+
totalPages: number;
|
|
77
|
+
};
|
|
78
|
+
}>;
|
|
79
|
+
};
|
|
80
|
+
export declare const useOutdialCall: (props: useOutdialCallProps) => {
|
|
81
|
+
startOutdial: (destination: string, origin?: string) => void;
|
|
82
|
+
getOutdialANIEntries: () => Promise<OutdialAniEntriesResponse>;
|
|
25
83
|
};
|
package/dist/types/index.d.ts
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import { IncomingTask } from './IncomingTask/index';
|
|
2
2
|
import { TaskList } from './TaskList';
|
|
3
3
|
import { CallControl } from './CallControl';
|
|
4
|
-
|
|
4
|
+
import { OutdialCall } from './OutdialCall';
|
|
5
|
+
import { CallControlCAD } from './CallControlCAD';
|
|
6
|
+
export { IncomingTask, TaskList, CallControl, OutdialCall, CallControlCAD };
|
|
@@ -1,156 +1,13 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
export
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
incomingTask: ITask;
|
|
15
|
-
/**
|
|
16
|
-
* CC SDK Instance.
|
|
17
|
-
*/
|
|
18
|
-
cc: IContactCenter;
|
|
19
|
-
/**
|
|
20
|
-
* Handler for task accepted
|
|
21
|
-
*/
|
|
22
|
-
onAccepted?: () => void;
|
|
23
|
-
/**
|
|
24
|
-
* Handler for task declined
|
|
25
|
-
*/
|
|
26
|
-
onDeclined?: () => void;
|
|
27
|
-
/**
|
|
28
|
-
* Handler for task accepted in TaskList
|
|
29
|
-
*/
|
|
30
|
-
onTaskAccepted?: (task: ITask) => void;
|
|
31
|
-
/**
|
|
32
|
-
* Handler for task declined in TaskList
|
|
33
|
-
*/
|
|
34
|
-
onTaskDeclined?: (task: ITask) => void;
|
|
35
|
-
/**
|
|
36
|
-
* accept incoming task action
|
|
37
|
-
*/
|
|
38
|
-
accept: () => void;
|
|
39
|
-
/**
|
|
40
|
-
* decline incoming task action
|
|
41
|
-
*/
|
|
42
|
-
decline: () => void;
|
|
43
|
-
/**
|
|
44
|
-
* accept task from task list
|
|
45
|
-
*/
|
|
46
|
-
acceptTask: (task: ITask) => void;
|
|
47
|
-
/**
|
|
48
|
-
* decline task from tasklist
|
|
49
|
-
*/
|
|
50
|
-
declineTask: (task: ITask) => void;
|
|
51
|
-
/**
|
|
52
|
-
* Flag to determine if the user is logged in with a browser option
|
|
53
|
-
*/
|
|
54
|
-
isBrowser: boolean;
|
|
55
|
-
/**
|
|
56
|
-
* Flag to determine if the task is answered
|
|
57
|
-
*/
|
|
58
|
-
isAnswered: boolean;
|
|
59
|
-
/**
|
|
60
|
-
* Flag to determine if the task is ended
|
|
61
|
-
*/
|
|
62
|
-
isEnded: boolean;
|
|
63
|
-
/**
|
|
64
|
-
* Selected login option
|
|
65
|
-
*/
|
|
66
|
-
selectedLoginOption: string;
|
|
67
|
-
/**
|
|
68
|
-
* List of tasks
|
|
69
|
-
*/
|
|
70
|
-
taskList: ITask[];
|
|
71
|
-
/**
|
|
72
|
-
* The logger instance from SDK
|
|
73
|
-
*/
|
|
74
|
-
logger: ILogger;
|
|
75
|
-
}
|
|
76
|
-
export type UseTaskProps = Pick<TaskProps, 'cc' | 'onAccepted' | 'onDeclined' | 'selectedLoginOption' | 'logger'>;
|
|
77
|
-
export type UseTaskListProps = Pick<TaskProps, 'cc' | 'selectedLoginOption' | 'onTaskAccepted' | 'onTaskDeclined' | 'logger'>;
|
|
78
|
-
export type IncomingTaskPresentationalProps = Pick<TaskProps, 'incomingTask' | 'isBrowser' | 'isAnswered' | 'isEnded' | 'accept' | 'decline'>;
|
|
79
|
-
export type IncomingTaskProps = Pick<TaskProps, 'onAccepted' | 'onDeclined'>;
|
|
80
|
-
export type TaskListProps = Pick<TaskProps, 'onTaskAccepted' | 'onTaskDeclined'>;
|
|
81
|
-
export type TaskListPresentationalProps = Pick<TaskProps, 'currentTask' | 'taskList' | 'isBrowser' | 'acceptTask' | 'declineTask'>;
|
|
82
|
-
export declare enum TASK_EVENTS {
|
|
83
|
-
TASK_INCOMING = "task:incoming",
|
|
84
|
-
TASK_ASSIGNED = "task:assigned",
|
|
85
|
-
TASK_MEDIA = "task:media",
|
|
86
|
-
TASK_HOLD = "task:hold",
|
|
87
|
-
TASK_UNHOLD = "task:unhold",
|
|
88
|
-
TASK_CONSULT = "task:consult",
|
|
89
|
-
TASK_CONSULT_END = "task:consultEnd",
|
|
90
|
-
TASK_CONSULT_ACCEPT = "task:consultAccepted",
|
|
91
|
-
TASK_PAUSE = "task:pause",
|
|
92
|
-
TASK_RESUME = "task:resume",
|
|
93
|
-
TASK_END = "task:end",
|
|
94
|
-
TASK_WRAPUP = "task:wrapup"
|
|
95
|
-
}
|
|
96
|
-
/**
|
|
97
|
-
* Interface representing the properties for control actions on a task.
|
|
98
|
-
*/
|
|
99
|
-
export interface ControlProps {
|
|
100
|
-
/**
|
|
101
|
-
* Audio reference
|
|
102
|
-
*/
|
|
103
|
-
audioRef: React.RefObject<HTMLAudioElement>;
|
|
104
|
-
/**
|
|
105
|
-
* The current task being handled.
|
|
106
|
-
*/
|
|
107
|
-
currentTask: ITask;
|
|
108
|
-
/**
|
|
109
|
-
* Function to handle hold/resume actions.
|
|
110
|
-
*/
|
|
111
|
-
onHoldResume: () => void;
|
|
112
|
-
/**
|
|
113
|
-
* Function to handle ending the task.
|
|
114
|
-
*/
|
|
115
|
-
onEnd: () => void;
|
|
116
|
-
/**
|
|
117
|
-
* Function to handle wrapping up the task.
|
|
118
|
-
*/
|
|
119
|
-
onWrapUp: () => void;
|
|
120
|
-
/**
|
|
121
|
-
* Logger instance for logging purposes.
|
|
122
|
-
*/
|
|
123
|
-
logger: ILogger;
|
|
124
|
-
/**
|
|
125
|
-
* Array of wrap-up codes.
|
|
126
|
-
* TODO: Expose this type from SDK.
|
|
127
|
-
*/
|
|
128
|
-
wrapupCodes: WrapupCodes[];
|
|
129
|
-
/**
|
|
130
|
-
* Indicates if wrap-up is required.
|
|
131
|
-
*/
|
|
132
|
-
wrapupRequired: boolean;
|
|
133
|
-
/**
|
|
134
|
-
* Function to handle hold/resume actions with a boolean parameter.
|
|
135
|
-
* @param hold - Boolean indicating whether to hold (true) or resume (false).
|
|
136
|
-
*/
|
|
137
|
-
toggleHold: (hold: boolean) => void;
|
|
138
|
-
/**
|
|
139
|
-
* Function to handle pause/resume recording actions with a boolean parameter.
|
|
140
|
-
* @param pause - Boolean indicating whether to pause (true) or resume (false) recording.
|
|
141
|
-
*/
|
|
142
|
-
toggleRecording: (pause: boolean) => void;
|
|
143
|
-
/**
|
|
144
|
-
* Function to handle ending the call.
|
|
145
|
-
*/
|
|
146
|
-
endCall: () => void;
|
|
147
|
-
/**
|
|
148
|
-
* Function to handle wrapping up the call with a reason and ID.
|
|
149
|
-
* @param wrapupReason - The reason for wrapping up the call.
|
|
150
|
-
* @param wrapupId - The ID associated with the wrap-up reason.
|
|
151
|
-
*/
|
|
152
|
-
wrapupCall: (wrapupReason: string, wrapupId: string) => void;
|
|
153
|
-
}
|
|
154
|
-
export type CallControlProps = Pick<ControlProps, 'onHoldResume' | 'onEnd' | 'onWrapUp'>;
|
|
155
|
-
export type CallControlPresentationalProps = Pick<ControlProps, 'currentTask' | 'audioRef' | 'wrapupCodes' | 'wrapupRequired' | 'toggleHold' | 'toggleRecording' | 'endCall' | 'wrapupCall'>;
|
|
156
|
-
export type useCallControlProps = Pick<ControlProps, 'currentTask' | 'onHoldResume' | 'onEnd' | 'onWrapUp' | 'logger'>;
|
|
1
|
+
import { TaskProps, ControlProps, OutdialCallProps } from '@webex/cc-components';
|
|
2
|
+
export type UseTaskProps = Pick<TaskProps, 'incomingTask' | 'deviceType' | 'logger'> & Partial<Pick<TaskProps, 'onAccepted' | 'onRejected'>>;
|
|
3
|
+
export type UseTaskListProps = Pick<TaskProps, 'cc' | 'taskList' | 'deviceType' | 'logger'> & Partial<Pick<TaskProps, 'onTaskAccepted' | 'onTaskDeclined' | 'onTaskSelected'>>;
|
|
4
|
+
export type IncomingTaskProps = Pick<TaskProps, 'incomingTask'> & Partial<Pick<TaskProps, 'onAccepted' | 'onRejected'>>;
|
|
5
|
+
export type TaskListProps = Partial<Pick<TaskProps, 'onTaskAccepted' | 'onTaskDeclined' | 'onTaskSelected'>>;
|
|
6
|
+
export type CallControlProps = Partial<Pick<ControlProps, 'onHoldResume' | 'onEnd' | 'onWrapUp' | 'onRecordingToggle' | 'callControlClassName' | 'callControlConsultClassName' | 'onToggleMute' | 'consultTransferOptions'>>;
|
|
7
|
+
export type useCallControlProps = Pick<ControlProps, 'currentTask' | 'logger' | 'consultInitiated' | 'deviceType' | 'featureFlags' | 'isMuted'> & Partial<Pick<ControlProps, 'onHoldResume' | 'onEnd' | 'onWrapUp' | 'onRecordingToggle' | 'onToggleMute'>>;
|
|
8
|
+
export type Participant = {
|
|
9
|
+
id: string;
|
|
10
|
+
pType: 'Customer' | 'Agent' | string;
|
|
11
|
+
name?: string;
|
|
12
|
+
};
|
|
13
|
+
export type useOutdialCallProps = Pick<OutdialCallProps, 'cc' | 'logger'>;
|
package/package.json
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@webex/cc-task",
|
|
3
3
|
"description": "Webex Contact Center Widgets: Task",
|
|
4
|
-
"version": "1.28.0-ccwidgets.
|
|
4
|
+
"version": "1.28.0-ccwidgets.120",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
|
+
"types": "dist/types/index.d.ts",
|
|
6
7
|
"publishConfig": {
|
|
7
8
|
"access": "public"
|
|
8
9
|
},
|
|
@@ -16,47 +17,52 @@
|
|
|
16
17
|
"build": "yarn run -T tsc",
|
|
17
18
|
"build:src": "yarn run clean:dist && webpack",
|
|
18
19
|
"build:watch": "webpack --watch",
|
|
19
|
-
"test:unit": "jest --coverage"
|
|
20
|
+
"test:unit": "tsc --project tsconfig.test.json && jest --coverage",
|
|
21
|
+
"test:styles": "eslint"
|
|
20
22
|
},
|
|
21
23
|
"dependencies": {
|
|
22
|
-
"@webex/cc-
|
|
24
|
+
"@webex/cc-components": "1.28.0-ccwidgets.120",
|
|
25
|
+
"@webex/cc-store": "1.28.0-ccwidgets.120",
|
|
23
26
|
"mobx-react-lite": "^4.1.0",
|
|
24
|
-
"
|
|
27
|
+
"react-error-boundary": "^6.0.0"
|
|
25
28
|
},
|
|
26
29
|
"devDependencies": {
|
|
27
30
|
"@babel/core": "7.25.2",
|
|
28
31
|
"@babel/preset-env": "7.25.4",
|
|
29
32
|
"@babel/preset-react": "7.24.7",
|
|
30
33
|
"@babel/preset-typescript": "7.25.9",
|
|
34
|
+
"@eslint/js": "^9.20.0",
|
|
31
35
|
"@testing-library/dom": "10.4.0",
|
|
32
36
|
"@testing-library/jest-dom": "6.6.2",
|
|
33
37
|
"@testing-library/react": "16.0.1",
|
|
34
38
|
"@types/jest": "29.5.14",
|
|
35
39
|
"@types/react-test-renderer": "18",
|
|
40
|
+
"@webex/test-fixtures": "0.0.0",
|
|
36
41
|
"babel-jest": "29.7.0",
|
|
37
42
|
"babel-loader": "9.2.1",
|
|
43
|
+
"eslint": "^9.20.1",
|
|
44
|
+
"eslint-config-prettier": "^10.0.1",
|
|
45
|
+
"eslint-config-standard": "^17.1.0",
|
|
46
|
+
"eslint-plugin-import": "^2.25.2",
|
|
47
|
+
"eslint-plugin-n": "^15.0.0 || ^16.0.0 ",
|
|
48
|
+
"eslint-plugin-prettier": "^5.2.3",
|
|
49
|
+
"eslint-plugin-promise": "^6.0.0",
|
|
50
|
+
"eslint-plugin-react": "^7.37.4",
|
|
38
51
|
"file-loader": "6.2.0",
|
|
52
|
+
"globals": "^16.0.0",
|
|
39
53
|
"jest": "29.7.0",
|
|
40
54
|
"jest-environment-jsdom": "29.7.0",
|
|
55
|
+
"prettier": "^3.5.1",
|
|
41
56
|
"ts-loader": "9.5.1",
|
|
42
57
|
"typescript": "5.6.3",
|
|
58
|
+
"typescript-eslint": "^8.24.1",
|
|
43
59
|
"webpack": "5.94.0",
|
|
44
60
|
"webpack-cli": "5.1.4",
|
|
45
61
|
"webpack-merge": "6.0.1"
|
|
46
62
|
},
|
|
47
63
|
"peerDependencies": {
|
|
64
|
+
"@momentum-ui/react-collaboration": ">=26.197.0",
|
|
48
65
|
"react": ">=18.3.1",
|
|
49
66
|
"react-dom": ">=18.3.1"
|
|
50
|
-
}
|
|
51
|
-
"jest": {
|
|
52
|
-
"testEnvironment": "jsdom",
|
|
53
|
-
"testMatch": [
|
|
54
|
-
"**/tests/**/*.ts",
|
|
55
|
-
"**/tests/**/*.tsx"
|
|
56
|
-
],
|
|
57
|
-
"moduleNameMapper": {
|
|
58
|
-
"^.+\\.(css|less|scss)$": "babel-jest"
|
|
59
|
-
}
|
|
60
|
-
},
|
|
61
|
-
"stableVersion": "1.28.0-ccwidgets.11"
|
|
67
|
+
}
|
|
62
68
|
}
|
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
import React from 'react';
|
|
2
|
-
import { CallControlPresentationalProps } from '../task.types';
|
|
3
|
-
import './call-control.styles.scss';
|
|
4
|
-
declare function CallControlPresentational(props: CallControlPresentationalProps): React.JSX.Element;
|
|
5
|
-
export default CallControlPresentational;
|