Skip to content

Commit f4cb273

Browse files
Merge pull request #25 from zoho/TicketFormPreFill
Get ticket form and fields APIs changes
2 parents ed4bc0b + 9549802 commit f4cb273

File tree

6 files changed

+185
-8
lines changed

6 files changed

+185
-8
lines changed

android/src/main/java/com/zoho/desk/asap/RNZohodeskPortalSDK.java

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,11 +26,17 @@
2626
import com.zoho.desk.asap.api.ZDPortalAPI;
2727
import com.zoho.desk.asap.common.utils.ZDPTheme;
2828
import com.zoho.desk.asap.common.utils.ZDPThemeType;
29+
import com.zoho.desk.asap.api.response.TicketForm;
2930
import com.zoho.desk.asap.api.response.Layouts;
3031
import com.zoho.desk.asap.api.response.Layout;
3132
import com.zoho.desk.asap.api.util.ZohoDeskAPIImpl;
3233
import com.zoho.desk.asap.api.response.DepartmentsList;
3334
import com.zoho.desk.asap.api.response.Department;
35+
import com.zoho.desk.asap.api.ZDPortalCallback.TicketFormCallback;
36+
import com.zoho.desk.asap.api.response.TicketFieldsList;
37+
import com.zoho.desk.asap.api.ZDPortalCallback.TicketFieldsCallback;
38+
import com.zoho.desk.asap.api.response.TicketFieldsList;
39+
import com.zoho.desk.asap.api.ZDPortalTicketsAPI;
3440

3541

3642
import java.util.HashMap;
@@ -402,4 +408,56 @@ public void clearDeskPortalData() {
402408
ZohoDeskPortalSDK deskPortalSDK = ZohoDeskPortalSDK.getInstance(getCurrentActivity().getApplicationContext());
403409
deskPortalSDK.clearDeskPortalData();
404410
}
411+
412+
@ReactMethod
413+
public void getTicketForm(final ReadableMap params,String flags,final Callback successCallback, final Callback errorCallback){
414+
Handler handler = new Handler();
415+
handler.post(new Runnable(){
416+
@Override
417+
public void run(){
418+
ZDPortalCallback.TicketFormCallback ticketFormCallback = new ZDPortalCallback.TicketFormCallback() {
419+
@Override
420+
public void onTicketFormDownloaded(TicketForm ticketForm) {
421+
Gson gson = new Gson();
422+
String jsonString = gson.toJson(ticketForm);
423+
successCallback.invoke(Converter.toWritableMap(jsonString));
424+
}
425+
@Override
426+
public void onException(ZDPortalException exception) {
427+
WritableMap errorMap = Arguments.createMap();
428+
errorMap.putInt("errorCode",exception.getErrorCode());
429+
errorMap.putString("errorMsg",exception.getErrorMsg());
430+
errorCallback.invoke(errorMap);
431+
}
432+
};
433+
ZDPortalTicketsAPI.getTicketForm(ticketFormCallback,Converter.convertReadableMapToHashMap(params),flags);
434+
}
435+
});
436+
}
437+
438+
@ReactMethod
439+
public void getTicketFields(final ReadableMap params,String flags,final Callback successCallback, final Callback errorCallback){
440+
Handler handler = new Handler();
441+
handler.post(new Runnable(){
442+
@Override
443+
public void run(){
444+
ZDPortalCallback.TicketFieldsCallback ticketFieldsCallback = new ZDPortalCallback.TicketFieldsCallback() {
445+
@Override
446+
public void onTicketFieldsDownloaded(TicketFieldsList ticketFieldsList ) {
447+
Gson gson = new Gson();
448+
String jsonString = gson.toJson(ticketFieldsList);
449+
successCallback.invoke(Converter.toWritableMap(jsonString));
450+
}
451+
@Override
452+
public void onException(ZDPortalException exception) {
453+
WritableMap errorMap = Arguments.createMap();
454+
errorMap.putInt("errorCode",exception.getErrorCode());
455+
errorMap.putString("errorMsg",exception.getErrorMsg());
456+
errorCallback.invoke(errorMap);
457+
}
458+
};
459+
ZDPortalTicketsAPI.getTicketFields(ticketFieldsCallback,Converter.convertReadableMapToHashMap(params),flags);
460+
}
461+
});
462+
}
405463
}

components/ZohoDeskPortalSDKJSWrapper.js

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,14 @@ module.exports = {
4646

4747
getLayouts: function(params,successCallback,errorCallback) {
4848
RNZohoDeskPortalSDK.getLayouts(params,successCallback,errorCallback);
49-
}
49+
},
50+
51+
getTicketForm: function(params,featureFlags,successCallback,errorCallback) {
52+
RNZohoDeskPortalSDK.getTicketForm(params,featureFlags,successCallback,errorCallback);
53+
},
54+
55+
getTicketFields: function(params, featureFlags, successCallback, errorCallback) {
56+
RNZohoDeskPortalSDK.getTicketFields(params, featureFlags, successCallback, errorCallback);
57+
}
5058

5159
}

ios/RNZohoDeskPortalSDK.m

Lines changed: 111 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -174,4 +174,115 @@ - (dispatch_queue_t)methodQueue
174174

175175
}
176176

177+
RCT_EXPORT_METHOD(getTicketForm:(NSDictionary *)params featureFlags:(NSString *)flags successCallback:(RCTResponseSenderBlock)successCallback errorCallback:(RCTResponseSenderBlock)errorCallback) {
178+
// Android handled feature flags value in this API. iOS need to handle this
179+
[ZohoDeskPortalSDKTicket getForm:params headers:nil onCompletion:^(TicketForm * _Nullable ticketForm, NSError * _Nullable error) {
180+
if (error) {
181+
errorCallback(@[@{@"error": error.localizedDescription}]);
182+
return;
183+
}
184+
185+
if (ticketForm) {
186+
// Convert the TicketForm object to NSDictionary
187+
NSDictionary *formDict = [RNZohoDeskPortalSDK dictionaryFromTicketForm:ticketForm];
188+
successCallback(@[formDict]);
189+
} else {
190+
errorCallback(@[@{@"error": @"No ticket form available"}]);
191+
}
192+
}];
193+
}
194+
195+
RCT_EXPORT_METHOD(getTicketFields:(NSDictionary *)params featureFlags:(NSString *)flags successCallback:(RCTResponseSenderBlock)successCallback errorCallback:(RCTResponseSenderBlock)errorCallback) {
196+
// Android handle feature flags value in this API. iOS need to handle this
197+
[ZohoDeskPortalSDKTicket getFields:params onCompletion:^(NSArray<ZDTicketField *> * _Nullable ticketFields, NSError * _Nullable error) {
198+
if (error) {
199+
errorCallback(@[@{@"error": error.localizedDescription}]);
200+
return;
201+
}
202+
203+
if (ticketFields) {
204+
NSArray *fieldsDictArray = [RNZohoDeskPortalSDK dictionaryFromTicketFieldArray:ticketFields];
205+
NSDictionary *fieldData = @{@"data": fieldsDictArray};
206+
successCallback(@[fieldData]);
207+
} else {
208+
errorCallback(@[@{@"error": @"No ticket fields available"}]);
209+
}
210+
}];
211+
}
212+
213+
// Convert TicketForm to NSDictionary
214+
+ (NSDictionary *)dictionaryFromTicketForm:(TicketForm *)ticketForm {
215+
NSMutableArray *sectionsArray = [NSMutableArray array];
216+
217+
for (FormSection *section in ticketForm.sections) {
218+
NSDictionary *sectionDict = @{
219+
@"sectionName": section.sectionName,
220+
@"fields": [self dictionaryFromTicketFieldArray:section.fields]
221+
};
222+
[sectionsArray addObject:sectionDict];
223+
}
224+
225+
NSDictionary *sections = @{@"sections": sectionsArray};
226+
227+
return @{@"form": sections};
228+
}
229+
230+
// Convert TicketField array to NSDictionary
231+
+ (NSArray<NSDictionary *> *)dictionaryFromTicketFieldArray:(NSArray<ZDTicketField *> *)fields {
232+
NSMutableArray *fieldsArray = [NSMutableArray array];
233+
234+
for (ZDTicketField *field in fields) {
235+
NSDictionary *fieldDict = @{
236+
@"displayLabel": field.displayLabel ?: [NSNull null],
237+
@"i18NLabel": field.i18NLabel ?: [NSNull null],
238+
@"apiName": field.apiName ?: [NSNull null],
239+
@"id": field.id ?: [NSNull null],
240+
@"name": field.name ?: [NSNull null],
241+
@"type": field.type,
242+
@"isMandatory": @(field.isMandatory),
243+
@"allowedValues": field.allowedValues ?: [NSNull null],
244+
@"dependency": field.dependency ?: [NSNull null],
245+
@"defaultValue": field.defaultValue ?: [NSNull null],
246+
@"toolTip": field.toolTip ?: [NSNull null],
247+
@"toolTipType": field.toolTipType ?: [NSNull null],
248+
@"sortBy": field.sortBy ?: [NSNull null],
249+
@"statusMapping": [self dictionaryFromStatusMapping:field.statusMapping] ?: [NSNull null],
250+
@"restoreOnReplyValues": field.restoreOnReplyValues ?: [NSNull null],
251+
@"roundingOption": field.roundingOption ?: [NSNull null],
252+
@"fieldName": field.fieldName ?: [NSNull null],
253+
@"uploadAttachment": field.uploadAttachment ?: [NSNull null],
254+
@"captchaURL": field.captchaURL ?: [NSNull null],
255+
@"isPHI": @(field.isPHI),
256+
@"isEncryptedField": @(field.isEncryptedField),
257+
@"isNested": @(field.isNested),
258+
@"isVisible": @(field.isVisible),
259+
@"maxLength": @(field.maxLength),
260+
@"precison": @(field.precison),
261+
@"decimals": @(field.decimals),
262+
@"isReadOnly": @(field.isReadOnly),
263+
@"isCustomField": @(field.isCustomField)
264+
};
265+
[fieldsArray addObject:fieldDict];
266+
}
267+
268+
return fieldsArray;
269+
}
270+
271+
// Convert StatusMap array to NSDictionary
272+
+ (NSArray<NSDictionary *> *)dictionaryFromStatusMapping:(NSArray<StatusMap *> *)statusMapping {
273+
NSMutableArray *statusArray = [NSMutableArray array];
274+
275+
for (StatusMap *status in statusMapping) {
276+
NSDictionary *statusDict = @{
277+
@"mappingValue": status.mappingValue ?: [NSNull null],
278+
@"name": status.name ?: [NSNull null]
279+
};
280+
[statusArray addObject:statusDict];
281+
}
282+
283+
return statusArray;
284+
}
285+
286+
287+
177288
@end

ios/RNZohodeskPortalSdk.podspec

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
Pod::Spec.new do |s|
22
s.name = "RNZohodeskPortalSdk"
3-
s.version = "4.0.0-beta.2"
3+
s.version = "4.0.0-beta.4"
44
s.summary = "RNZohodeskPortalSdk"
55
s.description = <<-DESC
66
RNZohodeskPortalSdk
@@ -15,9 +15,9 @@ Pod::Spec.new do |s|
1515

1616

1717
s.dependency "React"
18-
s.dependency 'ZohoDeskPortalCore', '4.0.0-beta.2'
19-
s.dependency 'ZohoDeskPortalChatKit', '4.0.0-beta.2'
20-
s.dependency 'ZohoDeskPortalSalesIQ', '4.0.0-beta.2'
18+
s.dependency 'ZohoDeskPortalCore', '4.0.0-beta.4'
19+
s.dependency 'ZohoDeskPortalChatKit', '4.0.0-beta.4'
20+
s.dependency 'ZohoDeskPortalSalesIQ', '4.0.0-beta.4'
2121
end
2222

2323

package-lock.json

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "react-native-zohodesk-portal-sdk",
3-
"version": "2.0.0",
3+
"version": "2.0.1",
44
"description": "## Getting started",
55
"main": "index.js",
66
"scripts": {

0 commit comments

Comments
 (0)