DiscoverModule/lib/ui_screen/interactionform/viewinteractionprovider.dart

796 lines
27 KiB
Dart

import 'dart:convert';
import 'package:dio/dio.dart';
import 'package:discover_module/ui_screen/interactionform/interactionprovider.dart';
import 'package:discover_module/ui_screen/interactionform/model/interaction_config_data.dart';
import 'package:discover_module/ui_screen/interactionform/model/interaction_data.dart';
import 'package:discover_module/ui_screen/interactionform/model/json_form_data.dart';
import 'package:discover_module/ui_screen/interactionform/model/location_model.dart';
import 'package:discover_module/ui_screen/interactionform/model/save_interaction.dart';
import 'package:discover_module/ui_screen/interactionform/repository/hive_repository.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/services.dart';
import 'package:hive_flutter/hive_flutter.dart';
class ViewInteractionProvider extends ChangeNotifier {
List<FormFieldData> interactionReponseList = [];
// List<dynamic> sectionList = [];
List<SectionList> sectionList = [];
late Location locationList;
List<TextEditingController> textEditingControllerList = [];
List<TextEditingController> multipletextEditingControllerList = [];
int textfieldIndex = 0;
List<Country> countryList = [];
List<States> stateList = [];
List<City> cityList = [];
List<InputClass> checkboxlist = [];
String selectedCountry = 'Selected Country';
String radioValue = '';
bool checkboxValue = false;
late SaveInteraction saveInteraction;
List<SaveData> saveData = [];
List<SectionList> newList = [];
String sectionName = '';
late String selectedCity = 'Selected City', selectedState = 'Selected State';
String customdropdownValue = '';
String? selectedValue;
List<String> selectedItems = [];
InputClass? selectedObj;
List<SaveInteraction> savedList = [];
List<InteractionConfigData> intConfigDataList = [];
String? intId, intName;
final HiveDataRepository _hiveprovider = HiveDataRepository(
Hive.box<InteractionConfigData>('InteractionConfigDataBox'));
late final InteractionProvider interactionProvider;
initConfigData() async {
intConfigDataList = _hiveprovider.getAllDataFromHive();
notifyListeners();
}
Future<void> getRecords(String formname) async {
var box = await Hive.openBox<SaveInteraction>('InteractionDataBox');
savedList = box.values.toList();
savedList = savedList
.where(
(element) => element.form == formname,
)
.toList();
notifyListeners();
}
Future<List<SaveInteraction>> getAllRecords() async {
var box = await Hive.openBox<SaveInteraction>('InteractionDataBox');
List<SaveInteraction> savedList = box.values.toList();
return savedList;
}
init(int index) async {
// _hiveprovider = HiveDataRepository(
// Hive.box<InteractionConfigData>('InteractionConfigDataBox'));
// intConfigDataList = _hiveprovider.getAllDataFromHive();
InteractionConfigData interactionConfigData = intConfigDataList[index];
intId = intConfigDataList[index].id;
intName = intConfigDataList[index].name;
print("data $intConfigDataList");
// await fetchSaveDataJson();
// await fetchDataSet();
await fetchData(interactionConfigData.widgets);
await fetchLocationData();
}
initSavedForm(SaveInteraction saveInteractiondata) {
intConfigDataList
.indexWhere((element) => element.id == saveInteractiondata.intId);
interactionReponseList = saveInteractiondata.save
.map((e) => FormFieldData(
multipleList: e.multipleList == null
? []
: e.multipleList!
.map((mobj) => SectionList(
depid: mobj.depid,
id: mobj.id,
inputList: mobj.inputList,
isRequired: mobj.isRequired,
extension: mobj.extension,
fileName: mobj.fileName,
selectedObject: mobj.selectedObject,
name: mobj.name,
param: mobj.param,
selectedValue: mobj.selectedValue,
widget: mobj.widget,
controller: mobj.controller,
gid: mobj.gid,
input: mobj.input,
selectedId: mobj.selectedId,
value: mobj.value))
.toList(),
sectionList: e.sectionList
.map((obj) => SectionList(
depid: obj.depid,
id: obj.id,
inputList: obj.inputList,
isRequired: obj.isRequired,
extension: obj.extension,
fileName: obj.fileName,
name: obj.name,
param: obj.param,
selectedObject: obj.selectedObject,
selectedValue: obj.selectedValue,
widget: obj.widget,
controller: obj.controller,
gid: obj.gid,
input: obj.input,
selectedId: obj.selectedId,
value: obj.value))
.toList(),
sectionName: e.sectionName,
multiple: e.multiple))
.toList();
textEditingControllerList.clear();
for (var item in interactionReponseList) {
sectionList = item.sectionList;
for (SectionList obj in item.multipleList!) {
obj.gid = obj.gid ?? item.multipleList!.length;
if (obj.widget == InteractionWidget.TEXT) {
var textEditingController = TextEditingController();
textEditingController.text = obj.selectedValue!.isNotEmpty
? obj.selectedValue!.last ?? ""
: "";
multipletextEditingControllerList.add(textEditingController);
obj.controller = multipletextEditingControllerList.last;
// obj.controller = obj.selectedValue.last ?? " ";
}
if (obj.widget == InteractionWidget.DROPDOWN ||
obj.widget == InteractionWidget.AUTOCOMPLETE ||
obj.widget == InteractionWidget.MULTISELECT) {
List<InputClass> list = obj.inputList!;
if (obj.selectedObject != null) {
} else {
obj.selectedObject = obj.selectedValue!.isNotEmpty
? getDataObject(obj.id, obj.selectedValue!.last, list)
: list[0];
}
print("value : ${list.first.name} ");
}
if (obj.widget == InteractionWidget.CHECKBOX) {
List<String> selectedvalues = [];
if (obj.selectedValue!.isNotEmpty) {
for (var id in obj.selectedValue!) {
int ind =
obj.inputList!.indexWhere((element) => element.id == id);
if (ind != -1) {
obj.inputList![ind].ischecked = true;
selectedvalues.add(obj.inputList![ind].name);
}
}
}
}
if (obj.widget == InteractionWidget.RADIO) {
List<InputClass> list = obj.inputList!;
if (obj.selectedValue!.isNotEmpty) {
int ind = list
.indexWhere((element) => element.id == obj.selectedValue!.last);
if (ind != -1) {
obj.inputList![ind].ischecked = true;
radioValue = obj.inputList![ind].name;
}
}
}
// newList.add(obj);
}
for (var sectionItem in item.sectionList) {
if (sectionItem.widget == InteractionWidget.TEXT) {
var textEditingController = TextEditingController();
textEditingController.text = sectionItem.selectedValue!.isNotEmpty
? sectionItem.selectedValue!.last ?? " "
: " ";
textEditingControllerList.add(textEditingController);
sectionItem.controller = textEditingControllerList.last;
}
if (sectionItem.widget == InteractionWidget.DROPDOWN) {
List<InputClass> list = sectionItem.inputList!;
if (sectionItem.selectedObject != null) {
print("#######not null");
} else {
print("#######is_null");
if (sectionItem.selectedValue == null) {
print("#######is_null#####");
} else {
print('###${sectionItem.selectedValue}');
}
sectionItem.selectedObject = sectionItem.selectedValue!.isNotEmpty
? getDataObject(
sectionItem.id, sectionItem.selectedValue!.last, list)
: list[0];
}
print("valuesssss : ${sectionItem.selectedObject!.name} ");
}
if (sectionItem.widget == InteractionWidget.AUTOCOMPLETE ||
sectionItem.widget == InteractionWidget.MULTISELECT) {
List<InputClass> list = sectionItem.inputList!;
if (sectionItem.selectedObject != null) {
} else {
sectionItem.selectedObject = sectionItem.selectedValue!.isNotEmpty
? getDataObject(
sectionItem.id, sectionItem.selectedValue!.last, list)
: list[0];
}
print("value : ${list.first.name} ");
}
if (sectionItem.widget == InteractionWidget.CHECKBOX) {
List<String> selectedvalues = [];
if (sectionItem.selectedValue!.isNotEmpty) {
for (var id in sectionItem.selectedValue!) {
int ind = sectionItem.inputList!
.indexWhere((element) => element.id == id);
if (ind != -1) {
sectionItem.inputList![ind].ischecked = true;
selectedvalues.add(sectionItem.inputList![ind].name);
}
}
}
}
if (sectionItem.widget == InteractionWidget.RADIO) {
List<InputClass> list = sectionItem.inputList!;
if (sectionItem.selectedValue!.isNotEmpty) {
int ind = list.indexWhere(
(element) => element.id == sectionItem.selectedValue!.last);
if (ind != -1) {
sectionItem.inputList![ind].ischecked = true;
radioValue = sectionItem.inputList![ind].name;
}
}
}
if (sectionItem.widget == InteractionWidget.BUTTON &&
sectionItem.param == 'chooseFile' &&
sectionItem.selectedValue!.isNotEmpty) {
print("choosed file");
print(sectionItem.selectedValue!.last);
}
}
}
print(interactionReponseList);
print("check textcontrollers ${textEditingControllerList.length}");
}
Future<String> fetchDataSet() async {
List<InputClass> list = getData("intlocation_1");
print(list);
return "success";
}
List<InputClass> getData(String widgetId) {
List<InputClass> list = [];
return list;
}
InputClass getDataObject(String widgetId, String id, List<InputClass> list) {
// if (id != "") {
// List<InputClass> list = [];
InputClass value = InputClass(id: '', name: '');
if (list.isNotEmpty) {
int index = list.indexWhere((element) => element.id.toString() == id);
if (index != -1) {
value = list[index];
}
}
return value;
}
// TODO: Search for widget with depid and check if selected is not null and by selected id get the data of current widget
List<InputClass> getData2(SectionList sectionItem) {
List<InputClass> list = [];
// if (sectionItem.inputList != null) {
list = sectionItem.inputList!;
if (sectionItem.depid != "") {
// print("check depid : ${sectionItem.depid}");
int i = 0;
for (var obj in interactionReponseList) {
i = obj.sectionList
.indexWhere((element) => element.id == sectionItem.depid);
// print("check depid index: $i");
if (i != -1) {
//print("check depid value: ${obj.sectionList[i].value}");
if (obj.sectionList[i].value != null) {
if (list
.where((element) => element.pid == obj.sectionList[i].value)
.isNotEmpty) {
list = list
.where((element) => element.pid == obj.sectionList[i].value)
.toList();
sectionItem.selectedObject = list[0];
} else {
// InputClass obj = InputClass(
// id: "obj.sectionList[i].value",
// name: "Select ${sectionItem.name}");
list = [];
// list.add(obj);
sectionItem.selectedObject = null;
}
} else {
// int index = obj.sectionList
// .indexWhere((element) => element.id == sectionItem.id);
// list = obj.sectionList[index].inputList;
}
}
}
// int index = data[i].data.indexWhere((element) => element.)
}
// }
return list;
}
setDropDownValue(String value, SectionList sectionItem, bool multiple,
InputClass selectedObject) {
int i = 0;
for (var obj in interactionReponseList) {
if (multiple && obj.multipleList != null) {
i = obj.multipleList!.indexWhere((element) =>
element.id == sectionItem.id && element.gid == sectionItem.gid);
if (i != -1) {
obj.multipleList![i].value = value;
obj.multipleList![i].tempselectedValue = [];
obj.multipleList![i].tempselectedValue!.add(value);
// obj.multipleList![i].selectedObject = selectedObj;
}
} else {
i = obj.sectionList
.indexWhere((element) => element.id == sectionItem.id);
if (i != -1) {
obj.sectionList[i].value = value;
obj.sectionList[i].tempselectedValue = [];
obj.sectionList[i].tempselectedValue!.add(value);
// obj.sectionList[i].selectedObject = selectedObj;
}
}
}
notifyListeners();
}
Future<void> disposeValues() async {
print("dispose called");
// await _hiveprovider.closeHiveBox();
for (var obj in interactionReponseList) {
obj.multipleList!.clear();
// for (var obj2 in obj.sectionList) {
// obj2.selectedObject = null;
// }
obj.sectionList.clear();
}
interactionReponseList.clear();
}
setTextValue(String value, SectionList sectionItem, bool multiple) {
int i = 0;
for (var obj in interactionReponseList) {
if (multiple && obj.multipleList != null) {
i = obj.multipleList!.indexWhere((element) =>
element.id == sectionItem.id && element.gid == sectionItem.gid);
if (i != -1) {
obj.multipleList![i].value = value;
obj.multipleList![i].selectedValue!.add(value);
}
} else {
i = obj.sectionList
.indexWhere((element) => element.id == sectionItem.id);
if (i != -1) {
obj.sectionList[i].value = value;
obj.sectionList[i].selectedValue!.add(value);
}
}
}
notifyListeners();
}
setAutoCompleteValue(String value, SectionList sectionItem, bool multiple) {
int i = 0;
for (var obj in interactionReponseList) {
if (multiple && obj.multipleList != null) {
i = obj.multipleList!.indexWhere((element) =>
element.id == sectionItem.id && element.gid == sectionItem.gid);
if (i != -1) {
obj.multipleList![i].value = value;
obj.multipleList![i].tempselectedValue = [];
obj.multipleList![i].tempselectedValue!.add(value);
}
} else {
i = obj.sectionList
.indexWhere((element) => element.id == sectionItem.id);
if (i != -1) {
obj.sectionList[i].value = value;
obj.sectionList[i].tempselectedValue = [];
obj.sectionList[i].tempselectedValue!.add(value);
}
}
}
notifyListeners();
}
String getDropDownValue(
String value, SectionList sectionItem, List<InputClass> list) {
int i = 0;
String svalue = '';
i = list.indexWhere((element) => element.id == value);
if (i != -1) {
svalue = list[i].name;
} else {
svalue = list[0].name;
}
return svalue;
}
Future<String> fetchData(InteractionResultData interactionResultData) async {
InteractionResultData interactionConfig = interactionResultData;
print("itemCategoryModel Item = + ${interactionConfig.result}");
interactionReponseList = interactionConfig.result;
print("check stored: $interactionReponseList");
textEditingControllerList.clear();
for (var item in interactionReponseList) {
sectionList = item.sectionList;
for (var sectionItem in item.sectionList) {
if (sectionItem.widget == InteractionWidget.TEXT) {
var textEditingController = TextEditingController();
textEditingControllerList.add(textEditingController);
sectionItem.controller = textEditingControllerList.last;
}
if (sectionItem.widget == InteractionWidget.DROPDOWN ||
sectionItem.widget == InteractionWidget.AUTOCOMPLETE ||
sectionItem.widget == InteractionWidget.MULTISELECT) {
List<InputClass> list = sectionItem.inputList!;
sectionItem.value = list[0].name;
print("value : ${list.first} ");
}
}
}
print(interactionReponseList);
print("check textcontrollers ${textEditingControllerList.length}");
return "success";
}
Future<String> fetchLocationData() async {
var data =
await rootBundle.loadString("assets/images/locationdetailsform.json");
Locations loc =
Locations(location: Location.fromJson(json.decode(data)["location"]));
locationList = loc.location;
countryList = locationList.country;
stateList = locationList.state;
cityList = locationList.city;
print(locationList);
notifyListeners();
return "success";
}
List<States> getState(String cid) {
List<States> states =
stateList.where((element) => element.countryId == cid).toList();
return states;
}
List<City> getCity(String sid) {
List<City> city =
cityList.where((element) => element.stateId == sid).toList();
return city;
}
String getCountryId(String name) {
if (countryList.isNotEmpty) {
int i = countryList.indexWhere((element) => element.countryName == name);
return countryList[i].countryId;
}
return '';
}
String getStateId(String name) {
if (stateList.isNotEmpty) {
int i = stateList.indexWhere((element) => element.stateName == name);
return stateList[i].stateId;
}
return '';
}
String getCityId(String name) {
if (cityList.isNotEmpty) {
int i = cityList.indexWhere((element) => element.cityName == name);
return cityList[i].distId;
}
return '';
}
setRadioValue(SectionList sectionItem) {
List<InputClass> list = (sectionItem.input as List)
.map((itemWord) => InputClass.fromJson(itemWord))
.toList();
radioValue = list[0].name;
notifyListeners();
}
setcheckBoxValue(SectionList sectionItem, String sectionName, bool newValue,
String id, bool multiple) {
int index =
sectionItem.inputList!.indexWhere((element) => element.id == id);
sectionItem.inputList![index].ischecked = newValue;
// sectionItem.selectedValue.add(data[i].data[index].id);
int index2 = 0;
for (var obj in interactionReponseList) {
if (multiple && obj.multipleList != null) {
index2 = obj.multipleList!.indexWhere((element) =>
element.id == sectionItem.id && element.gid == sectionItem.gid);
if (index2 != -1) {
obj.multipleList![index2].value = sectionItem.inputList![index].id;
obj.multipleList![index2].selectedValue!
.add(sectionItem.inputList![index].id);
}
} else {
index2 = obj.sectionList
.indexWhere((element) => element.id == sectionItem.id);
if (index2 != -1) {
obj.sectionList[index2].value = sectionItem.inputList![index].id;
obj.sectionList[index2].selectedValue!
.add(sectionItem.inputList![index].id);
}
}
}
notifyListeners();
}
getSectionItem(String sectionName) {
newList = [];
List<SectionList> addList = [];
int index = interactionReponseList
.indexWhere((element) => element.sectionName == sectionName);
addList = interactionReponseList[index]
.sectionList
.map((e) => SectionList(
depid: e.depid,
id: e.id,
inputList: e.inputList,
isRequired: e.isRequired,
name: e.name,
param: e.param,
selectedValue: [],
widget: e.widget,
controller: e.controller,
gid: e.gid,
input: e.input,
selectedId: e.selectedId,
value: e.value))
.toList();
SectionList delItem = SectionList(
name: "delete",
param: "deletebtn",
id: "deletebtn",
selectedValue: [],
depid: "",
widget: InteractionWidget.BUTTON,
inputList: [],
isRequired: true);
addList.add(delItem);
// if (interactionReponseList[index].multipleList!.isEmpty) {
// newList = addList;
// } else {
if (interactionReponseList[index].multipleList == null) {
interactionReponseList[index].multipleList = addList;
} else {
interactionReponseList[index].multipleList =
interactionReponseList[index].multipleList! + addList;
}
newList = interactionReponseList[index].multipleList!;
// newList = newList + addList;
// }
if (interactionReponseList[index].multipleList != null) {
for (SectionList obj in interactionReponseList[index].multipleList!) {
obj.gid = obj.gid ?? interactionReponseList[index].multipleList!.length;
if (obj.widget == InteractionWidget.TEXT) {
var textEditingController = TextEditingController();
multipletextEditingControllerList.add(textEditingController);
obj.controller = multipletextEditingControllerList.last;
obj.controller!.text =
obj.selectedValue != null && obj.selectedValue!.isNotEmpty
? obj.selectedValue!.last
: '';
}
// newList.add(obj);
}
}
print(
"check length : ${interactionReponseList[index].multipleList!.length}");
notifyListeners();
}
deleteMultipleRows(
int gid, SectionList sectionItem, String selectedSectionName) {
int index = interactionReponseList
.indexWhere((element) => element.sectionName == selectedSectionName);
interactionReponseList[index]
.multipleList!
.removeWhere((item) => item.gid == gid);
notifyListeners();
}
saveJsonObject(BuildContext context, String form,
SaveInteraction saveInteraction) async {
List<FormFieldData> resultData = interactionReponseList
.map((e) => FormFieldData(
multipleList: e.multipleList == null
? []
: e.multipleList!
.map((mobj) => SectionList(
depid: mobj.depid,
id: mobj.id,
inputList: mobj.inputList,
isRequired: mobj.isRequired,
extension: mobj.extension,
fileName: mobj.fileName,
name: mobj.name,
param: mobj.param,
selectedValue:
mobj.tempselectedValue ?? mobj.selectedValue,
widget: mobj.widget,
gid: mobj.gid,
input: mobj.input,
selectedId: mobj.selectedId,
value: mobj.value))
.toList(),
sectionList: e.sectionList
.map((obj) => SectionList(
depid: obj.depid,
id: obj.id,
inputList: obj.inputList,
extension: obj.extension,
fileName: obj.fileName,
isRequired: obj.isRequired,
name: obj.name,
param: obj.param,
selectedValue: obj.tempselectedValue ?? obj.selectedValue,
widget: obj.widget,
controller: obj.controller,
gid: obj.gid,
input: obj.input,
selectedId: obj.selectedId,
value: obj.value))
.toList(),
sectionName: e.sectionName,
multiple: e.multiple,
))
.toList();
final data = SaveInteraction(
save: resultData,
id: saveInteraction.id,
updatedTime: DateTime.now().toString(),
form: saveInteraction.form,
intId: saveInteraction.intId,
intName: saveInteraction.intName,
);
var box = Hive.box<SaveInteraction>('InteractionDataBox');
if (!box.isOpen) {
box = await Hive.openBox<SaveInteraction>('InteractionDataBox');
}
int index =
box.values.toList().indexWhere((element) => element.id == data.id);
box.putAt(index, data);
await getRecords(saveInteraction.form!);
// box.close();
// await MockApiCall().postFormData(data);
}
Future<void> deleteRecord(SaveInteraction saveInteraction) async {
var box = await Hive.openBox<SaveInteraction>('InteractionDataBox');
final Map<dynamic, SaveInteraction> deliveriesmap = box.toMap();
dynamic deleteKey;
deliveriesmap.forEach((key, value) {
if (value.id == saveInteraction.id) {
deleteKey = key;
}
});
box.delete(deleteKey);
await getRecords(saveInteraction.form!);
//box.close();
}
List<MultipleSectionList> getModifiedList(List<SectionList> sectionList) {
List<MultipleSectionList> newSectionList = [];
for (var obj in sectionList) {
if (obj.id != 'deletebtn') {
if (obj.id == 'chooseFile') {
List<MultipartFile> files = [];
if (obj.selectedValue!.isNotEmpty && obj.selectedValue != null) {
for (var file in obj.selectedValue!) {
files.add(MultipartFile.fromFileSync(file));
}
}
MultipleSectionList newobj = MultipleSectionList(
id: obj.id,
selectedValue: files,
);
newSectionList.add(newobj);
} else {
MultipleSectionList newobj = MultipleSectionList(
id: obj.id,
selectedValue: obj.selectedValue!,
);
newSectionList.add(newobj);
}
}
}
return newSectionList;
}
bool validateMultipleRows() {
for (var obj in interactionReponseList) {
if (obj.multipleList != null) {
for (var mulobj in obj.multipleList!) {
if (mulobj.widget == InteractionWidget.TEXT) {
if (mulobj.controller!.text.isEmpty) {
return true;
}
}
}
}
}
return false;
}
bool validateTextFields() {
for (var obj in interactionReponseList) {
for (var mulobj in obj.sectionList) {
if (mulobj.widget == InteractionWidget.TEXT) {
if (mulobj.controller!.text.isEmpty) {
return true;
}
}
}
}
return false;
}
}