diff --git a/Backend/controllers/SymptomStatisticsController.js b/Backend/controllers/SymptomStatisticsController.js index a876f73f..eca03e4d 100644 --- a/Backend/controllers/SymptomStatisticsController.js +++ b/Backend/controllers/SymptomStatisticsController.js @@ -132,8 +132,18 @@ exports.get_symptom_logs = async (req, res) => { filter["current_symptoms.location.district"] = {$in : districts}; } - if(req.query.date){ - filter["current_symptoms.date"] = {$lte : new Date(req.query.date)} + if(req.query.start_date){ + filter["current_symptoms.date"] = {$gte : new Date(req.query.start_date)} + }else{ + let date = new Date() + date.setHours(date.getHours()-24) + filter["current_symptoms.date"] = {$gte : date} + } + + if(req.query.end_date){ + let date = new Date(req.query.end_date) + date.setHours(23) + Object.assign(filter["current_symptoms.date"], {$lte : date}); } let page = parseInt(req.query.page) || 1; diff --git a/Backend/controllers/UserController.js b/Backend/controllers/UserController.js index 4317b478..7a0768d8 100644 --- a/Backend/controllers/UserController.js +++ b/Backend/controllers/UserController.js @@ -219,14 +219,14 @@ exports.send_invitation_link = async (req, res) => { exports.send_multiple_invitation_link = async (req, res) => { let emails = req.body.emails; try { - User.find({ email: { $in: emails }}, (err, results) => { - const existingEmails = results.map(user => user.email); - if (existingEmails.length > 0) { - return res - .status(422) - .send( { "error": "This emails already exist.", "emails" :existingEmails }); - } - }); + let existingEmails= await User.find({ email: { $in: emails }}); + + existingEmails = existingEmails.map(user => user.email); + if (existingEmails.length > 0) { + return res + .status(422) + .send( { "error": "This emails already exist.", "emails" :existingEmails }); + } if (emails==undefined){ return res diff --git a/Backend/services/UpdateTasks.js b/Backend/services/UpdateTasks.js index 70d4b80e..bc7ae8bb 100644 --- a/Backend/services/UpdateTasks.js +++ b/Backend/services/UpdateTasks.js @@ -453,43 +453,41 @@ exports.update_public_resources = async () => { //Every 4 hours exports.update_world_statistics = async () => { - let request_url = - "https://datahub.io/core/covid-19/r/worldwide-aggregated.csv"; - let wldData = await axios.get(request_url); - - let data = wldData.data; - if (data) { - const options = { delimiter: ",", quote: '"' }; - data = csvjson.toObject(data, options); - let caseData = []; - console.log(data.length); - for (var index = 0; index < data.length; index++) { - let item = data[index]; - - caseData.push( - new WorldDataModel({ - _id: mongoose.Types.ObjectId(), - Confirmed: item["Confirmed"], - Recovered: item["Recovered"], - Deaths: item["Deaths"], - date: new Date(item.Date), - }) - ); - } - if (caseData.length > 0) { - try { - await WorldDataModel.collection.drop(); - } catch (err) { - console.log(err.toString()); - } - try { - await WorldDataModel.insertMany(caseData, { ordered: false }); - } catch (err) { - console.log(err.toString()); + const cases = await MapData.find({}); + let casesData = {}; + cases.forEach((country) => { + Object.keys(country.Data).forEach((key) => { + if (key !== "Country" && key != "Unique_Provinces") { + if (!casesData[`${key}`]) { + casesData[`${key}`] = new WorldDataModel({ + _id: mongoose.Types.ObjectId(), + Confirmed: 0, + Recovered: 0, + Deaths: 0, + date: new Date(key), + }); + } + casesData[`${key}`].Confirmed += country.Data[`${key}`][0]; + casesData[`${key}`].Recovered += country.Data[`${key}`][2]; + casesData[`${key}`].Deaths += country.Data[`${key}`][1]; } + }); + }); + const data = Object.keys(casesData).map(function (key) { + return casesData[key]; + }); + if (data && data.length > 0) { + try { + await WorldDataModel.collection.drop(); + } catch (err) { + console.log(err.toString()); + } + try { + await WorldDataModel.insertMany(data, { ordered: false }); + } catch (err) { + console.log(err.toString()); } } - console.log("update-completed"); }; diff --git a/Backend/test/SymptomStatisticsControllerTest.js b/Backend/test/SymptomStatisticsControllerTest.js index b3197c9a..a9e16ba9 100644 --- a/Backend/test/SymptomStatisticsControllerTest.js +++ b/Backend/test/SymptomStatisticsControllerTest.js @@ -19,96 +19,6 @@ chai.use(chaiHttp); describe("Symptom Statistics API", function() { describe("Statistics Tests", function(){ - let user; - let user_location; - let symptom_user; - let district; - let date = new Date(); - date.setHours(date.getHours() - 24); - beforeEach(async () => { - user = new User({ - _id: mongoose.Types.ObjectId(), - username: `${Date.now().toString()} ${Math.random()}`, - password: "$2a$10$efmxm5o1v.inI.eStGGxgO1zHk.L6UoA9LEyYrRPhWkmTQPX8.NKO", - gender: "FEMALE", - age_group: "21-30", - current_country: "Ethiopia" - }); - await user.save(); - - symptom_user = new SymptomUser({ - _id: mongoose.Types.ObjectId(), - user_id: user._id, - symptom_id: mongoose.Types.ObjectId(), - }); - await symptom_user.save(); - - district = new DistrictModel({ - _id: mongoose.Types.ObjectId(), - name: "Bole", - state: "Addis Abeba", - boundaries: { - type: "Polygon", - coordinates: [[38.77277374267584, 8.951707839965763], [38.7750511169433, 8.959457397461051], [38.76938629150402, 8.964635848999023], [38.76857757568365, 8.971710205078125], [38.76391220092779, 8.975526809692496], [38.76419830322271, 8.980051994323787], [38.769969940185604, 8.984671592712402], [38.774642944335994, 8.990886688232422], [38.77341461181652, 8.99995040893566], [38.775791168213004, 9.005511283874455], [38.774803161621094, 9.01102256774908], [38.77674102783209, 9.015738487243652], [38.783794403076286, 9.014875411987418], [38.792392730713004, 9.01681900024414], [38.798694610595646, 9.018692970275879], [38.808036804199276, 9.019802093505973], [38.81892013549799, 9.018701553344727], [38.829669952392635, 9.021367073059196], [38.840248107910156, 9.020879745483398], [38.85087585449219, 9.020322799682617], [38.85769271850586, 9.019966125488281], [38.87712860107433, 9.021015167236328], [38.88451766967785, 9.02137374877924], [38.889778137206974, 9.022211074829158], [38.89665985107422, 9.030497550964299], [38.90116119384777, 9.019584655761719], [38.90500259399414, 9.009499549865723], [38.90605545043957, 8.997531890869084], [38.904338836670036, 8.992156982421875], [38.90489959716797, 8.984115600585938], [38.90624237060547, 8.977418899536246], [38.90409469604498, 8.969542503357047], [38.90278625488281, 8.962411880493164], [38.89623641967779, 8.954837799072266], [38.90110015869146, 8.946141242981014], [38.89675903320318, 8.937026977539062], [38.891422271728516, 8.934331893920955], [38.88208007812506, 8.936197280883903], [38.869491577148494, 8.939620018005314], [38.861419677734375, 8.94267749786377], [38.85555648803711, 8.938292503356934], [38.84938430786144, 8.938275337219238], [38.841060638427734, 8.941080093383789], [38.83596801757824, 8.942173957824764], [38.82828903198242, 8.939469337463322], [38.82053756713873, 8.937870025634766], [38.81644439697271, 8.941584587097282], [38.8088836669923, 8.944089889526424], [38.80073547363281, 8.945956230163688], [38.79402923583979, 8.942293167114315], [38.785774230957145, 8.938777923583928], [38.78005981445324, 8.935907363891602], [38.7739372253418, 8.940291404724178], [38.771129608154354, 8.94519901275629], [38.77277374267584, 8.951707839965763]] - } - }) - await district.save() - - user_location = new LocationUser({ - user_id: user._id, - location: { - type: "Point", - coordinates: [38.796897, 8.985974], - district: district._id - }, - TTL: 10000, - }); - await user_location.save(); - }); - - afterEach(async () => { - await LocationUser.findByIdAndDelete(user_location._id); - await SymptomUser.findByIdAndDelete(symptom_user._id); - await DistrictModel.findByIdAndDelete(district._id); - await User.findByIdAndDelete(user._id); - }); - - it("it should return total number of symptoms on /api/symptom_statistics GET", async () => { - let response = await chai - .request(server) - .get("/api/symptom_statistics") - expect(response).to.have.status(200); - expect(response.body).to.have.property("result").greaterThan(0); - }); - - it("it should return total number of symptoms with the given filters on /api/symptom_statistics GET", async () => { - let response = await chai - .request(server) - .get("/api/symptom_statistics") - .query({country: "Ethiopia", date: date}) - expect(response).to.have.status(200); - expect(response.body).to.have.property("result").greaterThan(0); - }); - - it("it should return total number of symptoms with the given filters on /api/symptom_statistics GET", async () => { - let response = await chai - .request(server) - .get("/api/symptom_statistics") - .query({district: "Bole", date: date}) - expect(response).to.have.status(200); - expect(response.body).to.have.property("result").greaterThan(0); - }); - - it("it should return total number of people with symptoms on /api/symptom_statistics/people GET", async () => { - let response = await chai - .request(server) - .get("/api/symptom_statistics/people") - expect(response).to.have.status(200); - expect(response.body).to.have.property("result").greaterThan(0); - }); - }); - - describe("Most Common Symptoms Tests", function(){ let user; let user_location; let symptom_user1; @@ -203,33 +113,52 @@ describe("Symptom Statistics API", function() { await Symptom.findByIdAndDelete(symptom2._id); }); - it("it should return list of symptoms sorted by most common on /api/symptom_statistics/most_common GET", async () => { + it("it should return list of symptoms sorted by most common on /api/symptom_statistics GET", async () => { let response = await chai .request(server) - .get("/api/symptom_statistics/most_common") + .get("/api/symptom_statistics") expect(response).to.have.status(200); - expect(response.body).to.be.an("array"); - expect(response.body[0]).to.have.property("name", "Headaches"); + expect(response.body).to.be.an("object"); + expect(response.body.data).to.be.an("array"); + expect(response.body).to.have.property("total"); + expect(response.body.data[0]).to.have.property("count"); }); - it("it should return list of symptoms sorted by most common with the given filters on /api/symptom_statistics/most_common GET", async () => { + it("it should return list of symptoms sorted by most common with the given filters on /api/symptom_statistics GET", async () => { let response = await chai .request(server) - .get("/api/symptom_statistics/most_common") + .get("/api/symptom_statistics") .query({country: "Ethiopia", date: date}) expect(response).to.have.status(200); - expect(response.body).to.be.an("array"); - expect(response.body[0]).to.have.property("name", "Headaches"); + expect(response.body).to.be.an("object"); + expect(response.body.data).to.be.an("array"); + expect(response.body).to.have.property("total"); + expect(response.body.data[0]).to.have.property("count"); + }); - it("it should return list of symptoms sorted by most common with the given filters on /api/symptom_statistics/most_common GET", async () => { + it("it should return list of symptoms sorted by most common with the given filters on /api/symptom_statistics GET", async () => { + let response = await chai + .request(server) + .get("/api/symptom_statistics") + .query({district: "Bole", date: date}) + expect(response).to.have.status(200); + expect(response.body).to.be.an("object"); + expect(response.body.data).to.be.an("array"); + expect(response.body).to.have.property("total"); + expect(response.body.data[0]).to.have.property("count"); + + }); + + it("it should return the number of people with symptoms on /api/symptom_statistics/people GET", async () => { let response = await chai .request(server) - .get("/api/symptom_statistics/most_common") + .get("/api/symptom_statistics/people") .query({district: "Bole", date: date}) expect(response).to.have.status(200); - expect(response.body).to.be.an("array"); - expect(response.body[0]).to.have.property("name", "Headaches"); + expect(response.body).to.be.an("object"); + expect(response.body).to.have.property("result"); + }); }); @@ -310,8 +239,20 @@ describe("Symptom Statistics API", function() { .request(server) .get("/api/symptom_statistics/logs") expect(response).to.have.status(200); - expect(response.body[0]).to.have.property("status", "SYMPTOM_SUBMITTED"); - expect(response.body[0]).to.have.property("current_symptoms"); + expect(response.body).to.be.an("object"); + expect(response.body.data[0]).to.have.property("status", "SYMPTOM_SUBMITTED"); + expect(response.body.data[0]).to.have.property("current_symptoms"); + }); + + it("it should return all symptom logs with the given filters on /api/symptom_statistics/logs GET", async () => { + let response = await chai + .request(server) + .get("/api/symptom_statistics/logs") + .query({status: "SYMPTOM_SUBMITTED"}) + expect(response).to.have.status(200); + expect(response.body).to.be.an("object"); + expect(response.body.data[0]).to.have.property("status", "SYMPTOM_SUBMITTED"); + expect(response.body.data[0]).to.have.property("current_symptoms"); }); it("it should return symptom logs for a single user on /api/symptom_statistics/logs/user/:user_id GET", async () => { diff --git a/How to work with the mobile application.txt b/How to work with the mobile application.txt index c78f1f88..154d2691 100644 --- a/How to work with the mobile application.txt +++ b/How to work with the mobile application.txt @@ -1,15 +1,15 @@ -How to work with the COVID-19 Mobile Application : - -1.The first step to install React Native is Download and Install below required software packages. - NodeJS : Download and install the latest NodeJS windows machine installer software package from https://nodejs.org . - Python : Download and install the latest Python windows installer package from https://Python.org . - -2.Install react native using the command : - npm install -g react-native-cli - -3.Install Android Studio and its SDK from: - https://developer.android.com/studio/index.html - -4.Then clone this project in to your desired folder on your computer - +How to work with the COVID-19 Mobile Application : + +1.The first step to install React Native is Download and Install below required software packages. + NodeJS : Download and install the latest NodeJS windows machine installer software package from https://nodejs.org . + Python : Download and install the latest Python windows installer package from https://Python.org . + +2.Install react native using the command : + npm install -g react-native-cli + +3.Install Android Studio and its SDK from: + https://developer.android.com/studio/index.html + +4.Then clone this project in to your desired folder on your computer + 5.Then go in to the project folder and write "react-native run-android or react-native run-ios" to run it on your emulator or your phone \ No newline at end of file diff --git a/Track Sym Mobile App/src/localization/localization.js b/Track Sym Mobile App/src/localization/localization.js index 0484c5e1..ab7034a5 100644 --- a/Track Sym Mobile App/src/localization/localization.js +++ b/Track Sym Mobile App/src/localization/localization.js @@ -131,7 +131,7 @@ export let strings = new LocalizedStrings({ ChildrensPrivacy: "Children’s Privacy", ChangesToThisPrivacyPolicy: "Changes to This Privacy Policy", TermsAndConditions: "Terms & Conditions", - ChangesToThisTermsAndConditions: "Terms to This Terms and Conditions", + ChangesToThisTermsAndConditions: "Changes to This Terms and Conditions", ComingSoon: "Coming Soon!!", Heat: "Heat", Regional: "Regional", @@ -273,7 +273,7 @@ export let strings = new LocalizedStrings({ MessageFromUsDetailInfoDescriptionContentTwo: "Children may be disproportionately affected by measures taken to control the outbreak, such as school closures and physical distancing measures. Special attention needs to be paid to prevent and minimize negative consequences for children as much as possible. ", - DetailInfoAuthorFullName: "Weakpeadia", + DetailInfoAuthorFullName: "Wikipedia", InfoCovidDetailParagraphOneSubOne: "There is much more to coronaviruses than SARS-CoV-2. Coronaviruses are actually a family of hundreds of viruses. Most of these infect animals such as bats, chickens, camels and cats.", @@ -392,7 +392,21 @@ export let strings = new LocalizedStrings({ "Your data will be used anonymously for the purpose of data science and statistics, meaning any info generated isn’t traced back to a single user. This is a non-commercial project with no intention of profit.", userReminderToCheck: "Heyy there😻 Could you check your symptom page, its been a while since you been there!", - }, + + SymptomAnalytics :"Symptom Analytics", + Notification: "Notification", + Hotlines: "Hotlines", + + Loading: "loading...", + TotalSymptomReports:"Total Symptom Reports", + SymptomReportsYesterday:"Symptom Reports Yesterday", + SymptomReportsToCOVIDCases:"Symptom Reports to COVID Cases", + MostReportedSymptom:"Most Reported Symptom", + NoSymptomYet:"No Symptom Yet", + EnterCountry:"Enter Country", + VIEW:"VIEW", + NotificationDetail:"Notification Detail", + }, en: { Information: "Information", Data: "Data", @@ -520,7 +534,7 @@ export let strings = new LocalizedStrings({ ChildrensPrivacy: "Children’s Privacy", ChangesToThisPrivacyPolicy: "Changes to This Privacy Policy", TermsAndConditions: "Terms & Conditions", - ChangesToThisTermsAndConditions: "Terms to This Terms and Conditions", + ChangesToThisTermsAndConditions: "Changes to This Terms and Conditions", ComingSoon: "Coming Soon!!", Heat: "Heat", Regional: "Regional", @@ -662,7 +676,7 @@ export let strings = new LocalizedStrings({ MessageFromUsDetailInfoDescriptionContentTwo: "Children may be disproportionately affected by measures taken to control the outbreak, such as school closures and physical distancing measures. Special attention needs to be paid to prevent and minimize negative consequences for children as much as possible. ", - DetailInfoAuthorFullName: "Weakpeadia", + DetailInfoAuthorFullName: "Wikipedia", InfoCovidDetailParagraphOneSubOne: "There is much more to coronaviruses than SARS-CoV-2. Coronaviruses are actually a family of hundreds of viruses. Most of these infect animals such as bats, chickens, camels and cats.", @@ -784,6 +798,19 @@ export let strings = new LocalizedStrings({ LastWeek: "Last Week", LastMonth: "Last Month", LastThreeMonths: "Last Three Months", + SymptomAnalytics :"Symptom Analytics", + Notification: "Notification", + Hotlines: "Hotlines", + + Loading: "loading...", + TotalSymptomReports:"Total Symptom Reports", + SymptomReportsYesterday:"Symptom Reports Yesterday", + SymptomReportsToCOVIDCases:"Symptom Reports to COVID Cases", + MostReportedSymptom:"Most Reported Symptom", + NoSymptomYet:"No Symptom Yet", + EnterCountry:"Enter Country", + VIEW:"VIEW", + NotificationDetail:"Notification Detail", }, am: { Information: "መረጃ", @@ -798,8 +825,8 @@ export let strings = new LocalizedStrings({ EditProfile: "መረጃዬን አስተካክል", ChangePassword: "የሚስጥር ቁልፍ ማስተካከያ", TermsAndPrivacy: "ውሎች እና ግላዊነት", - DarkMode: "Dark Mode", - LightMode: "Light Mode", + DarkMode: "ጨልማ ሞድ", + LightMode: "ብርሃን ሞድ", LogOut: "ውጣ", Search: "ይፈልጉ..", Welcome: "እንኳን ደህና መጡ", @@ -808,8 +835,8 @@ export let strings = new LocalizedStrings({ SignIn: "ግባ", SignUp: "ይመዝገቡ", AgeGroup: "እድሜ ክልል", - Male: "MALE", - Female: "FEMALE", + Male: "ወንድ", + Female: "ሴት", Gender: "ፃታ", ConfirmPassword: "የሚስጥር ቁልፎን ያረጋግጡ", ReadMore: "ገብተው ያንብቡ", @@ -824,12 +851,12 @@ export let strings = new LocalizedStrings({ DailyStatsGraph: "ዕለታዊ ስታቲስቲክስ ግራፍ", TotalStatsGraph: "ጠቅላላ ስታቲስቲክስ ግራፍ", DailyRatesGraph: "የቀኑ የለውጥ ደረጃ", - NewConfirmed: "አዲስ የተረጋገጡ", - NewRecovered: "አዲስ ያገገሙ", - NewDeath: "አዲስ የሞቱ", - TotalConfirmed: "ጠቅላላ የተረጋገጡ", - TotalRecovered: "ጠቅላላ ያገገሙ", - TotalDeath: "ጠቅላላ ሞት", + NewConfirmed: "የተረጋገጡ", + NewRecovered: "ያገገሙ", + NewDeath: "የሞቱ", + TotalConfirmed: "የተረጋገጡ", + TotalRecovered: "ያገገሙ", + TotalDeath: "ሞት", StartDate: "የመጀመሪያ ቀን", EndDate: "የመጨረሻ ቀን", Confirmed: "የተረጋገጡ", @@ -843,7 +870,7 @@ export let strings = new LocalizedStrings({ Heat: "ሙቀት", Regional: "ክልላዊ", SearchCity: "ከተማ ፈልግ", - GEO: "GEO", + GEO: "ጂኦ", GeneralInfo: "አጠቃላይ መረጃ", DemoGraphics: "ዴሞግራፊክስ/ሥነ-ሕዝብ/", Close: "ዝጋ", @@ -868,7 +895,7 @@ export let strings = new LocalizedStrings({ DryCough: "ደረቅ ሳል", Fatigue: "ፋቲግ፣ ድካም", ShortnessOfBreath: "የትንፋሽ እጥረት", - Myalgia: "Myalgia", + Myalgia: "ማአልጂያ", LessCommon: "ብዙም ያልተለመዱ", Headache: "የእራስ ህመም", SoreThroat: "የተዘጋ ጉሮሮ", @@ -954,10 +981,10 @@ export let strings = new LocalizedStrings({ LoadingGraphDescription: "ግራፊክ መግለጫን እየከፈተ ነው", LoadingCriteriaDescription: "የመመዘኛዎች ዝርዝር መግለጫ እየከፈተ ነው", Languages: "ቋንቋዎች", - English: "English", + English: "እንግሊዝኛ", Amharic: "አማርኛ", Oromiffa: "ኦሮምኛ", - Turkish: "Turkish", + Turkish: "ቱሪክሽ", WhatIsCOVID19ShortDescription: "ኮሮናቫይረስ በሽታ 2019 ተላላፊ በሽታ ሲሆን በከባድ የመተንፈሻ አካላት ህመም የሚመጣ ነው።", @@ -974,7 +1001,7 @@ export let strings = new LocalizedStrings({ "ስለ COVID-19 የሚዘወተሩ ብዙ መረጃዎች አሉ ፣ ስለሆነም ትክክል የሆነውን እና ያልሆነውን ማወቅ አስፈላጊ ነው ፡፡", WhatIsCOVID19DetailInfoTitle: "COVID-19 ምንድነው ?", - WhatIsCOVID19DetailInfoDescription: "CORONAVIRUS DISEASE 2019", + WhatIsCOVID19DetailInfoDescription: "ኮሮና ቫይረስ ዲዚዝ 2019", WhatIsCOVID19DetailInfoDescriptionContentOne: "Severe Acute Respiratory Syndrome Coronavirus-2 (ሳርስ ኮቭ 2) ለአዲሱ የኮሮና ቫይረስ የተሰጠው ስም ነው፡፡ ኮቪድ 19 ቫይረሱ ለሚያስከትለው በሽታ የተሰጠው ስም ነው። ኮሮናቫይረስ በእንስሳት ውስጥ የሚተላለፉ ቫይረሶች ሲሆኑ ከእነዚህም መካከል አንዳንዶቹ የሰው ልጆች ላይ በቀላሉ ሊጠቁ ይችላሉ ፡፡", @@ -1050,7 +1077,7 @@ export let strings = new LocalizedStrings({ MessageFromUsDetailInfoDescriptionContentTwo: "እንደ ትምህርት ቤት መዘጋት እና የአካል መራራቅ ያሉ ወረርሽኙን ለመቆጣጠር በሚወሰዱ እርምጃዎች ህጻናት ላይ በተዘዋዋሪ ተፅእኖ ሊኖራቸው ይችላል። ስለዚህም በተቻለ መጠን በልጆች ላይ አሉታዊ ተፅእኖዎችን ለመከላከል እና ለመቀነስ ልዩ ትኩረት መሰጠት አለበት። ", - DetailInfoAuthorFullName: "Weakpeadia", + DetailInfoAuthorFullName: "ዊኪፔዲያ", InfoCovidDetailParagraphOneSubOne: "ኮሮና ቫይረስ አሁን ከሚታወቀው ሳርስ ኮቭ 2(SARS-CoV-2) በተጨማሪ ሌሎች በ 100 የሚቆጠሩ የቫይረስ ቤተሰቦችን ያካትታል። አብዛኞቹ አነዚህ ቫይረሶች እንደ የለሊት ወፍ፣ ዶሮ፤ ግመል እና ድመት የመሳሰሉ እንሥሣትን ያጠቃሉ።", @@ -1081,7 +1108,7 @@ export let strings = new LocalizedStrings({ InfoDetailMostCommonSyptomsListTitleTwo: "ደረቅ ሳል", InfoDetailMostCommonSyptomsListTitleThree: "ፋቲግ፣ ድካም", InfoDetailMostCommonSyptomsListTitleFour: "የትንፋሽ እጥረት", - InfoDetailMostCommonSyptomsListTitleFive: "Myalgia", + InfoDetailMostCommonSyptomsListTitleFive: "ማአልጂያ", InfoDetailMostCommonSyptomsListLableOne: "103 ዲግሪ ፋራናይት(39 ዲግሪ ሴንቲግሬድ) ወይም ከዚያ በላይ የሆነ የሰውነት ሙቀት ነው።", @@ -1150,15 +1177,15 @@ export let strings = new LocalizedStrings({ SuccessfullySave: "ተሳክቷል!", Current: "የአሁኑ", Registered: "የተመዘገበበት", - PercentagePerMillion: "People Per Million Stats", + PercentagePerMillion: "ሰዎች በሚሊዮንኛ ስሌት", References: "ማጣቀሻዎች", MinistryOfHealthEth: "የኢትዮጵያ ጤና ሚኒስቴር", CoronaAtGlance: "ኮሮና ቫይረስ በጨረፍታ, ሆፕኪንስ ሜድስን", WHO: "የአለም ጤና ድርጅት", - ECDC: "ECDC", - MedicalXpress: "MedicalXpress", + ECDC: "ኢ.ሲ.ዲ.ሲ", + MedicalXpress: "ሜዲካል ኤክስፕረስ", BriefHistory: "አጭር የኮሮና ቫይረሶች ታሪክ", - CDC: "CDC", + CDC: "ሲ.ዲ.ሲ", AboutParag1: "TrackSym መተግበሪያ/አፕሊኬሽን/ ተዛማጅ የሆነውን የኮ.ቪ.ድ. 19 ምልክቶችን ለመሰብሰብ እና የምልክቶቹ በተለያዪ ቦታዎች ያለውን መቀራራብ በካርታ ለሕዝብ ለማቅረብ የሚጠቅም የንግድ ያልሆነ መተግበሪያ ነው። ተጠቃሚዎች ስማቸውን ሳያስገቡ ሪፖርት ማድረግ እና በካርታ እይታ ውስጥ የሕመም ምልክቶችን ለመመልከት የሚፈልጉትን ቦታ መምረጥ ይችላሉ። አጠቃላይ የተሰበሰቡ መረጃዎችን ከአጭር ማብራሪያ ጋር የስርጭቱን ሁኔታ ለማየት በሚመች መልኩ ቀርቧል።ይህ መረጃ በማንኛውም የተመረጡ አገራት ወይም በዓለም አቀፍ ደረጃ በቫይረሱ መያዛቸውን የተረጋገጡ ሰዎች ቁጥር ፣ ሞት ፣ ያገገሙ ፣ እና ለቫይረሱ ለመያዛቸው ምርመራ የተደረገላቸውን ቁጥሮች ያጠቃልላል ፡፡ ከዚህ በተጨማሪም ከ ጋር የተዛመዱ ዓለም አቀፍ እንዲሁመ አካባቢያዊ መረጃዎች እና ዜናዎችን ለማኘት ጥሩ ቦታ ነው፡፡", AboutParag2: @@ -1170,10 +1197,26 @@ export let strings = new LocalizedStrings({ AboutParag5: "መረጃችሁን ስም—አልባ በሆነ መንገድ ለመረጃ ሳይብስና ለስታቲስቲክስ አገልግሎት የሚል ይሆናል። የናንተን መረጃ በመጠቀም የሚመነጭ ማንኛውም አይነት መረጃ የብዙ መረጃወች ጥርቅም ስለሚሆን ተለይቶ ወደ አንድ ሰው አያመለክትም ይህም የእረሶን ማንነትና ደህንነት በአግባቡ የጠበቀ ይሆናል።", userReminderToCheck: - "Heyy there😻 Could you check your symptom page, its been a while since you been there!", + "ሰላም 😻 ! የኔ ምልክቶች ገጽን ከጎበንኙ ቆይተዋል ፣ እባኮትን ይጎብኙ፡፡", LastWeek: "ባለፈው ሳምንት", LastMonth: "ባለፈው ወር", LastThreeMonths: "ያለፉት ሶስት ወሮች", + + + + SymptomAnalytics :"የምልክት ትንታኔዎች", + Notification: "ማስታወቂያ", + Hotlines: "ነጻ የስልክ መስመሮች", + + Loading: "በመጫን ላይ...", + TotalSymptomReports:"አጠቃላይ የምልክት ሪፖርቶች", + SymptomReportsYesterday:"የትናንት የምልክት ሪፖርቶች", + SymptomReportsToCOVIDCases:"የኮቪድ ምልክት ሪፖርቶች", + MostReportedSymptom:"በተደጋጋሚ ሪፖርት የተደረገው ምልክት", + NoSymptomYet:"ምንም ምልክት የለም", + EnterCountry:"ሀገር ያስገቡ", + VIEW:"ይመልከቱ", + NotificationDetail:"የማሳወቂያ ዝርዝር", }, tr: { Information: "Bilgi", @@ -1426,7 +1469,7 @@ export let strings = new LocalizedStrings({ "İçinde bulunduğumuz pandemi sürecinde durumun kontrol altına alınabilmesi için hazır ve istekli bir şekilde yetkililerin ve sağlık görevlilerinin tavsiyelerini, talimatlarını ve görevlerini uygulamalı ve kabul etmeliyiz. Ebeveynler bu süreçte soğukkanlı ve kendilerinden emin bir şekilde hareket etmeli ve çocuklarına da bu yönde örnek olmalıdırlar. Bu yeni virüsün hastalığın çocukları veya hamile kadınları nasıl etkilediği hakkında yeterince bilgimiz olmadığından, her yaştan insan virüsle enfekte olabilir ve virüsü bulaştırabilir.", MessageFromUsDetailInfoDescriptionContentTwo: "Salgını kontrol altına almak için alınan önlemlerden okulların kapatılması ve fiziksel mesafe kısıtlamaları gibi uygulamalar çocuklar üzerinde daha fazla etki bırakabilir. Bu nedenle söz konusu uygulamaların negatif etkisini minimuma indirmek için çocuklar bu süreçte özel ilgi gösterilmelidir. ", - DetailInfoAuthorFullName: "Weakpeadia", + DetailInfoAuthorFullName: "Wikipedia", InfoCovidDetailParagraphOneSubOne: "Koronavirüsler sadece SARS-CoV-2 ile sınırlı olmayıp bu ailede yüzlerce virüs bulunmaktadır. Bu virüslerden çoğu yarasalar, tavuklar, develer ve kediler gibi hayvanları enfekte eder.", InfoCovidDetailParagraphOneSubTwo: @@ -1549,6 +1592,20 @@ export let strings = new LocalizedStrings({ PrivacyPolicyParag9: " TO BE TRANSLATED ", PrivacyPolicyParag10: " TO BE TRANSLATED ", // -------------- END -------------- + + SymptomAnalytics :"Symptom Analytics", + Notification: "Notification", + Hotlines: "Hotlines", + + Loading: "loading...", + TotalSymptomReports:"Total Symptom Reports", + SymptomReportsYesterday:"Symptom Reports Yesterday", + SymptomReportsToCOVIDCases:"Symptom Reports to COVID Cases", + MostReportedSymptom:"Most Reported Symptom", + NoSymptomYet:"No Symptom Yet", + EnterCountry:"Enter Country", + VIEW:"VIEW", + NotificationDetail:"Notification Detail", }, orm: { Information: "Odeeffannoo", @@ -1568,15 +1625,15 @@ export let strings = new LocalizedStrings({ LogOut: "Cufii Ba’i", Search: "Barbaadi..", Welcome: "Anaa Dhufu!", - Username: "User Name", - Password: "Password", + Username: "Maqaa Fayyadamaa", + Password: "Jecha darbi", SignIn: "Seeni", SignUp: "Galmaa’i", AgeGroup: "Gita Umrii", Male: "Dhiira", Female: "Dhalaa", Gender: "Saala", - ConfirmPassword: "Confirm Password", + ConfirmPassword: "Jecha darbi Mirkaneessi", WhatIsCOVID19: "COVID-19 MAALI?", ReadMore: "Dabalataan Dubbisi", COVID19Symptoms: "Mallattoolee COVID-19", @@ -1628,56 +1685,56 @@ export let strings = new LocalizedStrings({ WhereDidItComeFrom: "Eessaa Dhufe?", Misconceptions: "Odeeffannoo Dogoggoraa", SymptomsOfCOVID19: "MALLATTOOLEE VAAYIRASII KORONAA", - MostCommon: "MOST COMMON", + MostCommon: "Daran kan Barame", HighFever: "Ho’ina Qaamaa Olaanaa", DryCough: "Qufaa Gogaa", Fatigue: "Dadhabbii", ShortnessOfBreath: "Hafuura Baafachuu Rakkachuu", Myalgia: "Myalgia", - LessCommon: "LESS COMMON", + LessCommon: "Daran kan hin baramne", Headache: "Mataa Dhukkubbii", - SoreThroat: "Sore Throat", + SoreThroat: "Cufamuu Qoonqoo (Kokkee)", Chills: "Qorrisiisuu / Dhaamochiisuu", Anosmia: "Dandeettii Foolii Fuudhuu Dadhabuu", PreventionIsBetterThanCure: "OFIRRAA ITTISUUN OF WAL’AANUU IIRRA WAYYA!", HandWashing: "Harka Dhiqannaa", SocialDistancing: "Walirraa Fageenya Qaamaa", - RecommendedMethods: "RECOMMENDED METHODS", - RespiratoryHygiene: "Respiratory Hygiene", + RecommendedMethods: "MALOOTA DEGGARAMOO", + RespiratoryHygiene: "Qulqullina Qaamolee Sirna Hargansuu", StayInformed: "Odeeffannoolee Haaraa Ba’an Hordofaa", Spread: "TAMSA’INA", HowDoesCoronavirusBecomeContagious: "Vaayirasiin Koronaa dhukkubaa daddarbaa akkamiiti?", MessageFromTrackSym: "Ergaa TrackSym Irraa", - MajorConcern: "MAJOR CONCERN", + MajorConcern: "Xiyyeeffannaa Olaanaa", MySymptoms: "Mallattoolee Ani Agarsiisu", EditYourSymptoms: "Mallattoolee Agarsiistu Gulaali", LoadingYourSymptom: "Mallattoolee Galmeessiste Fidaa Jira", YouHaveNotRegisteredAnySymptom: "Mallattoo Galmeessiste Hin Qabdu", RunnyNose: "Dhangalaa’aa Funyaan Keessaa Yaa’u", Sneezing: "Haxxiffannaa", - Conjunctivitis: "Conjunctivitis", + Conjunctivitis: "Gubuu fi diimachuu ijaa", Diarrhea: "Garaa Kaasaa", MediumGradeFever: "Ho’ina Qaamaa Giddu-galeessa", HighGradeFever: "Ho’ina Qaamaa Olaanaa", PersistentDryCough: "Qufaa Gogaa addaan hin cinne", DifficultyBreathing: "Harganuu Dadhabuu", - Pneumonia: "Pneumonia", + Pneumonia: "Dhukkuba Sombaa", RepeatedShakingWithChills: "Hoollannaa fi Dhaamocha addaan hin cinne", - ChangeProfile: "CHANGE PROFILE", - UpdateYourAgeGroup: "Update your age group", - UpdateYourGender: "Update your gender", - NewPassword: "NEW PASSWORD", + ChangeProfile: "Eenyummeessa Jijjiiri", + UpdateYourAgeGroup: "Gita umrii kee jijjiiri", + UpdateYourGender: "Koorniyaa jijjiiri", + NewPassword: "Jecha Darbi Haaraa", PrivacyPolicy: "Privacy Policy / Imaammata Dhuunfaa", - InformationCollectionAndUse: "Information Collection and Use", + InformationCollectionAndUse: "Haala funaansaafi fayyadama odeeffannoo", ServiceProviders: "Tajaajila Kan Kennan", - LogData: "Log Data", - Security: "Security", + LogData: "Kuufama Odeeffannoo", + Security: "Nageenya", LinkToOtherSites: "Gara Marsariitii biroo deemuuf", ChildrensPrivacy: "Imaammata Dhuunfaa Ijoolleef", - ChangesToThisPrivacyPolicy: "Changes to This Privacy Policy", - TermsAndConditions: "Terms & Conditions", - ChangesToThisTermsAndConditions: "Terms to This Terms and Conditions", + ChangesToThisPrivacyPolicy: "Jijjirama Imaammata Dhuunfaa irratti", + TermsAndConditions: "Haalotaafi Waliigaltee", + ChangesToThisTermsAndConditions: "Jijjiirama haalotaafi waliigaltee irrattii", ComingSoon: "Yeroo Dhiyootti Nu Eegaa!!", SaveChanges: "Jijjiirama ol kaa’i", Done: "Xumurame", @@ -1849,7 +1906,7 @@ export let strings = new LocalizedStrings({ MessageFromUsDetailInfoDescriptionContentTwo: "joolleen karaa biraatiin tarkaanfii weerara kana to’achuf godhamu kan akka cufinsa mana barnootaa, akkasumas qaamaan keessatti miidhamuu danda’u. Kanaafuu ijoolleef xiyyeeffannaan addaa hamma danda’ametti, akka isaan hin midhamneef, gochuun barbaachisaa.dha.", - DetailInfoAuthorFullName: "ikipedia", + DetailInfoAuthorFullName: "Wikipedia", InfoCovidDetailParagraphOneSubOne: "‘SARS-CoV-2’n alatti Gosoota Vaayirasii Koronaa baay’eetu argama. Vaayirasoonni Koronaa maatii vaayirasoota dhibbaan lakkaa’aamanidha. Baay’een isaanii bineensota akka sinbirroota halkanii, lukkuuwwan, gaalotaa fi adurreewwan keessatti kan argamaniidha.", @@ -1977,7 +2034,7 @@ export let strings = new LocalizedStrings({ SuccessfullySave: "Milkaa'eera!", Current: "Amma", Registered: "Kan Galmaa'e", - PercentagePerMillion: "People Per Million Stats", + PercentagePerMillion: "Istat. Hammamtaa Namoota Miilliyoonaan", References: "Wabii", MinistryOfHealthEth: "Ministeera Fayyaa Itoophiyaa", CoronaAtGlance: "Coronavirus at a Glance, Hopkins medicine", @@ -1997,9 +2054,23 @@ export let strings = new LocalizedStrings({ AboutParag5: "Odeeffannoo/daataa keessan sababa data science fi Statistics kan oolu yoo ta’u nama kamiifuu ifa kan hin baanedha.Appilikeeshiniin kun guutuumaan guututti tolaa fi bu’aa dinagdeef kan hin hojjatamnedha.", userReminderToCheck: - "Heyy there😻 Could you check your symptom page, its been a while since you been there!", - LastWeek: "Last Week", - LastMonth: "Last Month", - LastThreeMonths: "Last Three Months", + "Haarka Fuunee😻! Baaafata mallattoolee keessaan ilaaluu ni dandeessuu? Eerga ilaaltanii xiqqoo bubbuleera.", + LastWeek: "Torbee Darbe", + LastMonth: "Ji'a Darbe", + LastThreeMonths: "Ji'oota Saddan Darban", + + SymptomAnalytics :"Xinxala Mallattoo", + Notification: "Beeksisa", + Hotlines: "Sarara Bilbilaa Bilisaa", + + Loading: "Fe'uurra...", + TotalSymptomReports:"Gabaasoota Mallattoo Waligalaa", + SymptomReportsYesterday:"Gabaasoota Mallattoo kalessaa", + SymptomReportsToCOVIDCases:"Gabaasoota Mallattoo COVID", + MostReportedSymptom:"Mallattoo Irra Caalaatti Gabaasame", + NoSymptomYet:"Mallattoo Hin Jiruu", + EnterCountry:"Biyya Galchi", + VIEW:"Mul'isii", + NotificationDetail:"Ibsama Beeksisaa", }, }); diff --git a/Track Sym Mobile App/src/navigation/appNavigation.js b/Track Sym Mobile App/src/navigation/appNavigation.js index 4b09e664..0ecca5e8 100644 --- a/Track Sym Mobile App/src/navigation/appNavigation.js +++ b/Track Sym Mobile App/src/navigation/appNavigation.js @@ -150,13 +150,13 @@ export const AppNavigator = (props) => { onSelect={(index) => navigation.navigate(state.routeNames[index.row])} > - + - + - + ); diff --git a/Track Sym Mobile App/src/pages/hotlines-page/index.js b/Track Sym Mobile App/src/pages/hotlines-page/index.js index f120cf2b..dc6d89e2 100644 --- a/Track Sym Mobile App/src/pages/hotlines-page/index.js +++ b/Track Sym Mobile App/src/pages/hotlines-page/index.js @@ -69,7 +69,7 @@ export const HotlineScreen = (props) => { diff --git a/Track Sym Mobile App/src/pages/notification/notification.js b/Track Sym Mobile App/src/pages/notification/notification.js index de0e66a9..ece9ae23 100644 --- a/Track Sym Mobile App/src/pages/notification/notification.js +++ b/Track Sym Mobile App/src/pages/notification/notification.js @@ -74,7 +74,7 @@ const NotificationScreen = (props) => { strings.setLanguage(lang); - const goToNews = (reference_link) => { + const getDetailInfo = (reference_link) => { props.navigation.navigate("NotificationView", { data: reference_link }); }; @@ -88,17 +88,17 @@ const NotificationScreen = (props) => { ); const renderItemAccessory = (link) => ( ); return ( diff --git a/Track Sym Mobile App/src/pages/notification/notificationView.js b/Track Sym Mobile App/src/pages/notification/notificationView.js index c4aebbc3..241d599b 100644 --- a/Track Sym Mobile App/src/pages/notification/notificationView.js +++ b/Track Sym Mobile App/src/pages/notification/notificationView.js @@ -10,6 +10,7 @@ import { } from '@ui-kitten/components'; import { Divider } from 'react-native-paper'; import { ScrollView } from 'react-native-gesture-handler'; +import { strings } from '../../localization/localization'; const ArrowIosBackIcon = (style) => ; @@ -24,7 +25,7 @@ const NotificationView = (props) => { return ( diff --git a/Track Sym Mobile App/src/pages/public-data-page/DataAnalytics.js b/Track Sym Mobile App/src/pages/public-data-page/DataAnalytics.js index 42ae9c33..de9027f2 100644 --- a/Track Sym Mobile App/src/pages/public-data-page/DataAnalytics.js +++ b/Track Sym Mobile App/src/pages/public-data-page/DataAnalytics.js @@ -472,40 +472,29 @@ class DataAnalytics extends React.Component { this.state.daily_newCases_data_set = [0]; //reseting all data point labels //generating interval - var interval = Math.floor(objList.length / 6); - var remainder = objList.length % 6; - if (interval === 0) { - interval = 1; - remainder = 0; + let customLength=objList.length-1; + if (objList.length === 7){ + var interval=1; + }else{ + var interval= Math.ceil(customLength / 5); } let dataSet_counter = 0; let indexCounterSet = 0; - while (dataSet_counter < objList.length) { + + while (dataSet_counter < customLength) { this.state.daily_newCases_data_set[indexCounterSet] = - objList[dataSet_counter].y; - indexCounterSet += 1; - if (remainder > 0 && dataSet_counter + remainder === objList.length - 1) { - dataSet_counter += remainder; - continue; - } - dataSet_counter += interval; - } - let graphLebel_counter = 0; - let indexCounter = 0; - while (graphLebel_counter < objList.length) { - this.state.daily_newCases_label[indexCounter] = this.dateConverter( - objList[graphLebel_counter].t.split("T")[0] + objList[dataSet_counter].y; + this.state.daily_newCases_label[indexCounterSet] = this.dateConverter( + objList[dataSet_counter].t.split("T")[0] ); - indexCounter += 1; - if ( - remainder > 0 && - graphLebel_counter + remainder === objList.length - 1 - ) { - graphLebel_counter += remainder; - continue; - } - graphLebel_counter += interval; + indexCounterSet += 1; + dataSet_counter += interval; } + this.state.daily_newCases_data_set[indexCounterSet] = + objList[customLength].y; + this.state.daily_newCases_label[indexCounterSet] = this.dateConverter( + objList[customLength].t.split("T")[0] + ); }; //Populates statistics data in to our state @@ -514,41 +503,29 @@ class DataAnalytics extends React.Component { this.state.data_set = [0]; // reseting data set //generating interval - var interval = Math.floor(objList.length / 6); - var remainder = objList.length % 6; - if (interval === 0) { - interval = 1; - remainder = 0; + let customLength=objList.length-1; + if (objList.length === 7){ + var interval=1; + }else{ + var interval= Math.ceil(customLength / 5); } let dataSet_counter = 0; let indexCounterSet = 0; - while (dataSet_counter < objList.length) { - this.state.data_set[indexCounterSet] = objList[dataSet_counter].y; - - indexCounterSet += 1; - if (remainder > 0 && dataSet_counter + remainder === objList.length - 1) { - dataSet_counter += remainder; - continue; - } - dataSet_counter += interval; - } - - let graphLebel_counter = 0; - let indexCounter = 0; - while (graphLebel_counter < objList.length) { - this.state.graph_label[indexCounter] = this.dateConverter( - objList[graphLebel_counter].t.split("T")[0] + + while (dataSet_counter < customLength) { + this.state.data_set[indexCounterSet] = + objList[dataSet_counter].y; + this.state.graph_label[indexCounterSet] = this.dateConverter( + objList[dataSet_counter].t.split("T")[0] ); - indexCounter += 1; - if ( - remainder > 0 && - graphLebel_counter + remainder === objList.length - 1 - ) { - graphLebel_counter += remainder; - continue; - } - graphLebel_counter += interval; + indexCounterSet += 1; + dataSet_counter += interval; } + this.state.data_set[indexCounterSet] = + objList[customLength].y; + this.state.graph_label[indexCounterSet] = this.dateConverter( + objList[customLength].t.split("T")[0] + ); }; //populate daily data @@ -601,43 +578,29 @@ class DataAnalytics extends React.Component { this.state.percentage_data_set = [0]; //reseting all data point labels //generating interval - var interval = Math.floor(objList.length / 6); - var remainder = objList.length % 6; - if (interval === 0) { - interval = 1; - remainder = 0; + let customLength=objList.length-1; + if (objList.length === 7){ + var interval=1; + }else{ + var interval= Math.ceil(customLength / 5); } let dataSet_counter = 0; let indexCounterSet = 0; - while (dataSet_counter < objList.length) { + + while (dataSet_counter < customLength) { this.state.percentage_data_set[indexCounterSet] = - objList[dataSet_counter].y; - - indexCounterSet += 1; - if (remainder > 0 && dataSet_counter + remainder === objList.length - 1) { - dataSet_counter += remainder; - continue; - } - dataSet_counter += interval; - } - - var remainder = objList.length % 5; - let graphLebel_counter = 0; - let indexCounter = 0; - while (graphLebel_counter < objList.length) { - this.state.percentage_label[indexCounter] = this.dateConverter( - objList[graphLebel_counter].t.split("T")[0] + objList[dataSet_counter].y; + this.state.percentage_label[indexCounterSet] = this.dateConverter( + objList[dataSet_counter].t.split("T")[0] ); - indexCounter += 1; - if ( - remainder > 0 && - graphLebel_counter + remainder === objList.length - 1 - ) { - graphLebel_counter += remainder; - continue; - } - graphLebel_counter += interval; + indexCounterSet += 1; + dataSet_counter += interval; } + this.state.percentage_data_set[indexCounterSet] = + objList[customLength].y; + this.state.percentage_label[indexCounterSet] = this.dateConverter( + objList[customLength].t.split("T")[0] + ); }; //Reformat number diff --git a/Track Sym Mobile App/src/pages/references/index.js b/Track Sym Mobile App/src/pages/references/index.js index 2600cbd3..67cb862c 100644 --- a/Track Sym Mobile App/src/pages/references/index.js +++ b/Track Sym Mobile App/src/pages/references/index.js @@ -74,7 +74,7 @@ export const ReferenceScreen = (props) => { diff --git a/Track Sym Mobile App/src/pages/symptom-analitics/index.js b/Track Sym Mobile App/src/pages/symptom-analitics/index.js index c7ebd1d4..5874e1d9 100644 --- a/Track Sym Mobile App/src/pages/symptom-analitics/index.js +++ b/Track Sym Mobile App/src/pages/symptom-analitics/index.js @@ -14,15 +14,23 @@ import { } from '@ui-kitten/components'; import userIDStore from '../../data-management/user-id-data/userIDStore'; +import { strings } from '../../localization/localization'; +import languageStore from "../../data-management/language_data/languageStore"; const ArrowIosBackIcon = (style) => ; const SymptomAnaliticsPage = (props) => { + + languageStore.subscribe(() => { + strings.setLanguage(languageStore.getState()); + changeLabels(); + }); + const [data, setData] = useState([ - { index: 0, val: 'loading...', label: 'Total Symptom Reports' }, - { index: 1, val: 'loading...', label: 'Symptom Reports Yesterday' }, - { index: 2, val: '0.8', label: 'Symptom Reports to COVID Cases' }, - { index: 3, val: 'loading...', label: 'Most Reported Symptom' }, + { index: 0, val: strings.Loading, label: strings.TotalSymptomReports}, + { index: 1, val: strings.Loading, label: strings.SymptomReportsYesterday}, + { index: 2, val: '0.8', label: strings.SymptomReportsToCOVIDCases }, + { index: 3, val: strings.Loading, label: strings.MostReportedSymptom }, ]); const [mostCommonFetched, setMostCommonFetched] = useState(false); const [last24HourFetched, setLast24HourFetched] = useState(false); @@ -39,6 +47,22 @@ const SymptomAnaliticsPage = (props) => { /> ); + const changeLabels = async () =>{ + await setData((data) => + data.map((d) => { + switch (d.index) { + case 0: + return { ...d, val: strings.Loading, label: strings.TotalSymptomReports }; + case 1: + return { ...d, val: strings.Loading, label: strings.SymptomReportsYesterday }; + case 2: + return { ...d, label: strings.SymptomReportsToCOVIDCases }; + case 3: + return { ...d, val: strings.Loading, label: strings.MostReportedSymptom }; + } + }) + ); + } const fetchMostCommon = async (filter) => { setMostCommonFetched(false); let url = @@ -62,7 +86,7 @@ const SymptomAnaliticsPage = (props) => { setData((data) => data.map((d) => { if (d.index === 3) { - return { ...d, val: json[0] ? json[0].name : 'No Symptom Yet' }; + return { ...d, val: json[0] ? json[0].name : strings.NoSymptomYet }; } return d; }) @@ -183,7 +207,7 @@ const SymptomAnaliticsPage = (props) => { return ( @@ -191,7 +215,7 @@ const SymptomAnaliticsPage = (props) => { { setSearch(text); diff --git a/covid-19-app-web/src/components/core/DateRangePicker.vue b/covid-19-app-web/src/components/core/DateRangePicker.vue index d23ca18b..b8ab6a1c 100644 --- a/covid-19-app-web/src/components/core/DateRangePicker.vue +++ b/covid-19-app-web/src/components/core/DateRangePicker.vue @@ -19,15 +19,15 @@ @@ -44,12 +44,13 @@ export default { computed: { maxDate: () => moment(new Date()).format("YYYY-MM-DD"), dateRangeText() { - return this.rangeToText(this.date_range[0], this.date_range[1]); + return this.rangeToText(this.newDateRange[0], this.newDateRange[1]); } }, data() { return { - mdiCalendar + mdiCalendar, + newDateRange: this.date_range //not to modify "date_range" prop }; }, methods: { diff --git a/covid-19-app-web/src/router/admin.js b/covid-19-app-web/src/router/admin.js index 64e88d57..c955aeaf 100644 --- a/covid-19-app-web/src/router/admin.js +++ b/covid-19-app-web/src/router/admin.js @@ -7,8 +7,6 @@ const InviteAdmin = () => import("../views-admin/auth/InviteAdmin.vue"); const Login = () => import("../views-admin/auth/Login.vue"); const Symptoms = () => import("../views-admin/symptoms/Symptoms.vue"); -const SymptomDetails = () => - import("../views-admin/symptoms/SymptomDetails.vue"); export const admin = [ { @@ -63,11 +61,6 @@ export const admin = [ roles: ["ephi_user"] } }, - { - name: "SymptomDetails", - path: "symptoms/:id/details", - component: SymptomDetails - }, { name: "Dashboard", path: "/", diff --git a/covid-19-app-web/src/store/index.js b/covid-19-app-web/src/store/index.js index 3f6a067d..a4e93755 100644 --- a/covid-19-app-web/src/store/index.js +++ b/covid-19-app-web/src/store/index.js @@ -10,6 +10,7 @@ import symTrack from "./sym-track"; import user from "./user"; import ethiopia from "./ethiopia"; import privacyPolicy from "./privacy-policy"; +import symptoms from "./symptoms"; import createPersistedState from "vuex-persistedstate"; import ajax from "../auth/ajax"; @@ -130,6 +131,7 @@ export default new Vuex.Store({ messages, ethiopia, symTrack, - privacyPolicy + privacyPolicy, + symptoms } }); diff --git a/covid-19-app-web/src/store/loaders.js b/covid-19-app-web/src/store/loaders.js index 5dc638ab..0a30b362 100644 --- a/covid-19-app-web/src/store/loaders.js +++ b/covid-19-app-web/src/store/loaders.js @@ -30,6 +30,11 @@ export default { diseaseCompare: 0, descriptions: false, countryResources: false + }, + symptomStatLoaders: { + total: false, + totalPeople: false, + peopleList: false } }, getters: { @@ -47,6 +52,9 @@ export default { }, getGraphLoaders(state) { return state.graphLoaders; + }, + getSymptomStatLoaders(state) { + return state.symptomStatLoaders; } }, mutations: { @@ -73,6 +81,9 @@ export default { }, resetGraphLoaders(state, key) { state.graphLoaders[key] = 0; + }, + setSymptomStatLoaders(state, { key, value }) { + state.symptomStatLoaders[key] = value; } } }; diff --git a/covid-19-app-web/src/store/symptoms.js b/covid-19-app-web/src/store/symptoms.js new file mode 100644 index 00000000..ca134d10 --- /dev/null +++ b/covid-19-app-web/src/store/symptoms.js @@ -0,0 +1,131 @@ +import ajax from "../auth/ajax"; + +const state = { + totalSymptoms: 0, + mostCommonSymptom: "", + mostCommonSymptomCount: 0, + totalPeoplesWithSymptoms: 0, + peoplesWithSymptoms: [], + peopleCount: 0 +}; + +const getters = { + getTotalSymptoms: state => state.totalSymptoms, + getMostCommonSymptom: state => state.mostCommonSymptom, + getMostCommonSymptomCount: state => state.mostCommonSymptomCount, + getTotalPeoplesWithSymptoms: state => state.totalPeoplesWithSymptoms, + getPeoplesWithSymptoms: state => state.peoplesWithSymptoms, + getPeopleCount: state => state.peopleCount +}; + +const mutations = { + setTotalSymptoms: (state, payload) => (state.totalSymptoms = payload), + setMostCommonSymptom: (state, payload) => (state.mostCommonSymptom = payload), + setMostCommonSymptomCount: (state, payload) => + (state.mostCommonSymptomCount = payload), + setTotalPeoplesWithSymptoms: (state, payload) => + (state.totalPeoplesWithSymptoms = payload), + setPeoplesWithSymptoms: (state, payload) => + (state.peoplesWithSymptoms = payload), + setPeopleCount: (state, payload) => (state.peopleCount = payload) +}; + +const actions = { + fetchTotalSymptoms: ({ commit }) => { + commit("setSymptomStatLoaders", { key: "total", value: true }); + ajax + .get(`symptom_statistics`) + .then( + response => { + commit("setTotalSymptoms", response.data.total); + commit("setMostCommonSymptom", response.data.data[0].symptom.name); + commit("setMostCommonSymptomCount", response.data.data[0].count); + }, + error => { + console.log(error); + } + ) + .finally(function() { + commit("setSymptomStatLoaders", { key: "total", value: false }); + }); + }, + fetchTotalPeoplesWithSymptoms: ({ commit }) => { + commit("setSymptomStatLoaders", { key: "totalPeople", value: true }); + ajax + .get(`symptom_statistics/people`) + .then( + response => { + commit("setTotalPeoplesWithSymptoms", response.data.result); + }, + error => { + console.log(error); + } + ) + .finally(function() { + commit("setSymptomStatLoaders", { key: "totalPeople", value: false }); + }); + }, + fetchPeoplesWithSymptoms: ( + { commit }, + { page, size, status, username, start_date, end_date } + ) => { + commit("setSymptomStatLoaders", { key: "peopleList", value: true }); + ajax + .get(`symptom_statistics/logs`, { + params: { + page: page, + size: size, + status: status, + username: username, + start_date: start_date, + end_date: end_date + } + }) + .then( + response => { + commit("setPeopleCount", response.data.data_count); + let tableData = []; + response.data.data.forEach(element => { + let row = { + id: element.user_id._id, + gender: element.user_id.gender, + date: new Date( + element.user_id.last_symptom_update + ).toLocaleDateString(undefined, { + year: "numeric", + month: "long", + day: "numeric", + hour: "numeric", + minute: "numeric", + second: "numeric", + timeZoneName: "short" + }), + status: element.status, + person: element.user_id.username, + symptoms: Array(element.current_symptoms.symptoms.length) + .fill() + .map((_, i) => " " + element.current_symptoms.symptoms[i].name), + riskScore: element.current_symptoms.symptoms[0].relevance, //until risk_score can be mapped to "High, Medium, Low" + location: element.current_symptoms.location.country + }; + tableData.push(row); + }); + commit("setPeoplesWithSymptoms", tableData); + console.log(tableData); + }, + error => { + console.log(error); + } + ) + .finally(function() { + commit("setSymptomStatLoaders", { key: "peopleList", value: false }); + }); + } +}; + +export default { + state, + getters, + mutations, + actions +}; diff --git a/covid-19-app-web/src/views-admin/symptoms/DetailSidebar.vue b/covid-19-app-web/src/views-admin/symptoms/DetailSidebar.vue new file mode 100644 index 00000000..22b50992 --- /dev/null +++ b/covid-19-app-web/src/views-admin/symptoms/DetailSidebar.vue @@ -0,0 +1,94 @@ + + + diff --git a/covid-19-app-web/src/views-admin/symptoms/HighLevelStatistics.vue b/covid-19-app-web/src/views-admin/symptoms/HighLevelStatistics.vue new file mode 100644 index 00000000..01f841b9 --- /dev/null +++ b/covid-19-app-web/src/views-admin/symptoms/HighLevelStatistics.vue @@ -0,0 +1,90 @@ + + + diff --git a/covid-19-app-web/src/views-admin/symptoms/SymptomDetails.vue b/covid-19-app-web/src/views-admin/symptoms/SymptomDetails.vue deleted file mode 100644 index a55920c2..00000000 --- a/covid-19-app-web/src/views-admin/symptoms/SymptomDetails.vue +++ /dev/null @@ -1,11 +0,0 @@ - - - - - diff --git a/covid-19-app-web/src/views-admin/symptoms/SymptomFilter.vue b/covid-19-app-web/src/views-admin/symptoms/SymptomFilter.vue new file mode 100644 index 00000000..dea7c34f --- /dev/null +++ b/covid-19-app-web/src/views-admin/symptoms/SymptomFilter.vue @@ -0,0 +1,71 @@ + + + diff --git a/covid-19-app-web/src/views-admin/symptoms/Symptoms.vue b/covid-19-app-web/src/views-admin/symptoms/Symptoms.vue index 94724dca..db71b151 100644 --- a/covid-19-app-web/src/views-admin/symptoms/Symptoms.vue +++ b/covid-19-app-web/src/views-admin/symptoms/Symptoms.vue @@ -1,10 +1,165 @@ diff --git a/ephi_healthcare_worker_app/.gitignore b/ephi_healthcare_worker_app/.gitignore new file mode 100644 index 00000000..1ba9c339 --- /dev/null +++ b/ephi_healthcare_worker_app/.gitignore @@ -0,0 +1,43 @@ +# Miscellaneous +*.class +*.log +*.pyc +*.swp +.DS_Store +.atom/ +.buildlog/ +.history +.svn/ + +# IntelliJ related +*.iml +*.ipr +*.iws +.idea/ + +# The .vscode folder contains launch configuration and tasks you configure in +# VS Code which you may wish to be included in version control, so this line +# is commented out by default. +#.vscode/ + +# Flutter/Dart/Pub related +**/doc/api/ +.dart_tool/ +.flutter-plugins +.flutter-plugins-dependencies +.packages +.pub-cache/ +.pub/ +/build/ + +# Web related +lib/generated_plugin_registrant.dart + +# Symbolication related +app.*.symbols + +# Obfuscation related +app.*.map.json + +# Exceptions to above rules. +!/packages/flutter_tools/test/data/dart_dependencies_test/**/.packages diff --git a/ephi_healthcare_worker_app/.metadata b/ephi_healthcare_worker_app/.metadata new file mode 100644 index 00000000..ade6bc98 --- /dev/null +++ b/ephi_healthcare_worker_app/.metadata @@ -0,0 +1,10 @@ +# This file tracks properties of this Flutter project. +# Used by Flutter tool to assess capabilities and perform upgrades etc. +# +# This file should be version controlled and should not be manually edited. + +version: + revision: 8af6b2f038c1172e61d418869363a28dffec3cb4 + channel: stable + +project_type: app diff --git a/ephi_healthcare_worker_app/README.md b/ephi_healthcare_worker_app/README.md new file mode 100644 index 00000000..20fc0df3 --- /dev/null +++ b/ephi_healthcare_worker_app/README.md @@ -0,0 +1,16 @@ +# ephi_healthcare_worker_app + +EPHI healthcare workers mobile app + +## Getting Started + +This project is a starting point for a Flutter application. + +A few resources to get you started if this is your first Flutter project: + +- [Lab: Write your first Flutter app](https://flutter.dev/docs/get-started/codelab) +- [Cookbook: Useful Flutter samples](https://flutter.dev/docs/cookbook) + +For help getting started with Flutter, view our +[online documentation](https://flutter.dev/docs), which offers tutorials, +samples, guidance on mobile development, and a full API reference. diff --git a/ephi_healthcare_worker_app/android/.gitignore b/ephi_healthcare_worker_app/android/.gitignore new file mode 100644 index 00000000..bc2100d8 --- /dev/null +++ b/ephi_healthcare_worker_app/android/.gitignore @@ -0,0 +1,7 @@ +gradle-wrapper.jar +/.gradle +/captures/ +/gradlew +/gradlew.bat +/local.properties +GeneratedPluginRegistrant.java diff --git a/ephi_healthcare_worker_app/android/app/build.gradle b/ephi_healthcare_worker_app/android/app/build.gradle new file mode 100644 index 00000000..7bd83dfe --- /dev/null +++ b/ephi_healthcare_worker_app/android/app/build.gradle @@ -0,0 +1,54 @@ +def localProperties = new Properties() +def localPropertiesFile = rootProject.file('local.properties') +if (localPropertiesFile.exists()) { + localPropertiesFile.withReader('UTF-8') { reader -> + localProperties.load(reader) + } +} + +def flutterRoot = localProperties.getProperty('flutter.sdk') +if (flutterRoot == null) { + throw new GradleException("Flutter SDK not found. Define location with flutter.sdk in the local.properties file.") +} + +def flutterVersionCode = localProperties.getProperty('flutter.versionCode') +if (flutterVersionCode == null) { + flutterVersionCode = '1' +} + +def flutterVersionName = localProperties.getProperty('flutter.versionName') +if (flutterVersionName == null) { + flutterVersionName = '1.0' +} + +apply plugin: 'com.android.application' +apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle" + +android { + compileSdkVersion 28 + + lintOptions { + disable 'InvalidPackage' + } + + defaultConfig { + // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). + applicationId "com.example.ephi_healthcare_worker_app" + minSdkVersion 16 + targetSdkVersion 28 + versionCode flutterVersionCode.toInteger() + versionName flutterVersionName + } + + buildTypes { + release { + // TODO: Add your own signing config for the release build. + // Signing with the debug keys for now, so `flutter run --release` works. + signingConfig signingConfigs.debug + } + } +} + +flutter { + source '../..' +} diff --git a/ephi_healthcare_worker_app/android/app/src/debug/AndroidManifest.xml b/ephi_healthcare_worker_app/android/app/src/debug/AndroidManifest.xml new file mode 100644 index 00000000..49bf623b --- /dev/null +++ b/ephi_healthcare_worker_app/android/app/src/debug/AndroidManifest.xml @@ -0,0 +1,7 @@ + + + + diff --git a/ephi_healthcare_worker_app/android/app/src/main/AndroidManifest.xml b/ephi_healthcare_worker_app/android/app/src/main/AndroidManifest.xml new file mode 100644 index 00000000..af4e07b4 --- /dev/null +++ b/ephi_healthcare_worker_app/android/app/src/main/AndroidManifest.xml @@ -0,0 +1,47 @@ + + + + + + + + + + + + + + + + + diff --git a/ephi_healthcare_worker_app/android/app/src/main/java/com/example/ephi_healthcare_worker_app/MainActivity.java b/ephi_healthcare_worker_app/android/app/src/main/java/com/example/ephi_healthcare_worker_app/MainActivity.java new file mode 100644 index 00000000..f9d7dd52 --- /dev/null +++ b/ephi_healthcare_worker_app/android/app/src/main/java/com/example/ephi_healthcare_worker_app/MainActivity.java @@ -0,0 +1,6 @@ +package com.example.ephi_healthcare_worker_app; + +import io.flutter.embedding.android.FlutterActivity; + +public class MainActivity extends FlutterActivity { +} diff --git a/ephi_healthcare_worker_app/android/app/src/main/res/drawable/launch_background.xml b/ephi_healthcare_worker_app/android/app/src/main/res/drawable/launch_background.xml new file mode 100644 index 00000000..304732f8 --- /dev/null +++ b/ephi_healthcare_worker_app/android/app/src/main/res/drawable/launch_background.xml @@ -0,0 +1,12 @@ + + + + + + + + diff --git a/ephi_healthcare_worker_app/android/app/src/main/res/mipmap-hdpi/ic_launcher.png b/ephi_healthcare_worker_app/android/app/src/main/res/mipmap-hdpi/ic_launcher.png new file mode 100644 index 00000000..db77bb4b Binary files /dev/null and b/ephi_healthcare_worker_app/android/app/src/main/res/mipmap-hdpi/ic_launcher.png differ diff --git a/ephi_healthcare_worker_app/android/app/src/main/res/mipmap-mdpi/ic_launcher.png b/ephi_healthcare_worker_app/android/app/src/main/res/mipmap-mdpi/ic_launcher.png new file mode 100644 index 00000000..17987b79 Binary files /dev/null and b/ephi_healthcare_worker_app/android/app/src/main/res/mipmap-mdpi/ic_launcher.png differ diff --git a/ephi_healthcare_worker_app/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/ephi_healthcare_worker_app/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png new file mode 100644 index 00000000..09d43914 Binary files /dev/null and b/ephi_healthcare_worker_app/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png differ diff --git a/ephi_healthcare_worker_app/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/ephi_healthcare_worker_app/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png new file mode 100644 index 00000000..d5f1c8d3 Binary files /dev/null and b/ephi_healthcare_worker_app/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png differ diff --git a/ephi_healthcare_worker_app/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/ephi_healthcare_worker_app/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png new file mode 100644 index 00000000..4d6372ee Binary files /dev/null and b/ephi_healthcare_worker_app/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png differ diff --git a/ephi_healthcare_worker_app/android/app/src/main/res/values/styles.xml b/ephi_healthcare_worker_app/android/app/src/main/res/values/styles.xml new file mode 100644 index 00000000..1f83a33f --- /dev/null +++ b/ephi_healthcare_worker_app/android/app/src/main/res/values/styles.xml @@ -0,0 +1,18 @@ + + + + + + + diff --git a/ephi_healthcare_worker_app/android/app/src/profile/AndroidManifest.xml b/ephi_healthcare_worker_app/android/app/src/profile/AndroidManifest.xml new file mode 100644 index 00000000..49bf623b --- /dev/null +++ b/ephi_healthcare_worker_app/android/app/src/profile/AndroidManifest.xml @@ -0,0 +1,7 @@ + + + + diff --git a/ephi_healthcare_worker_app/android/build.gradle b/ephi_healthcare_worker_app/android/build.gradle new file mode 100644 index 00000000..e0d7ae2c --- /dev/null +++ b/ephi_healthcare_worker_app/android/build.gradle @@ -0,0 +1,29 @@ +buildscript { + repositories { + google() + jcenter() + } + + dependencies { + classpath 'com.android.tools.build:gradle:3.5.0' + } +} + +allprojects { + repositories { + google() + jcenter() + } +} + +rootProject.buildDir = '../build' +subprojects { + project.buildDir = "${rootProject.buildDir}/${project.name}" +} +subprojects { + project.evaluationDependsOn(':app') +} + +task clean(type: Delete) { + delete rootProject.buildDir +} diff --git a/ephi_healthcare_worker_app/android/gradle.properties b/ephi_healthcare_worker_app/android/gradle.properties new file mode 100644 index 00000000..38c8d454 --- /dev/null +++ b/ephi_healthcare_worker_app/android/gradle.properties @@ -0,0 +1,4 @@ +org.gradle.jvmargs=-Xmx1536M +android.enableR8=true +android.useAndroidX=true +android.enableJetifier=true diff --git a/ephi_healthcare_worker_app/android/gradle/wrapper/gradle-wrapper.properties b/ephi_healthcare_worker_app/android/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 00000000..296b146b --- /dev/null +++ b/ephi_healthcare_worker_app/android/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,6 @@ +#Fri Jun 23 08:50:38 CEST 2017 +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.2-all.zip diff --git a/ephi_healthcare_worker_app/android/settings.gradle b/ephi_healthcare_worker_app/android/settings.gradle new file mode 100644 index 00000000..d3b6a401 --- /dev/null +++ b/ephi_healthcare_worker_app/android/settings.gradle @@ -0,0 +1,15 @@ +// Copyright 2014 The Flutter Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +include ':app' + +def localPropertiesFile = new File(rootProject.projectDir, "local.properties") +def properties = new Properties() + +assert localPropertiesFile.exists() +localPropertiesFile.withReader("UTF-8") { reader -> properties.load(reader) } + +def flutterSdkPath = properties.getProperty("flutter.sdk") +assert flutterSdkPath != null, "flutter.sdk not set in local.properties" +apply from: "$flutterSdkPath/packages/flutter_tools/gradle/app_plugin_loader.gradle" diff --git a/ephi_healthcare_worker_app/assets/fonts/Comfortaa-Regular.ttf b/ephi_healthcare_worker_app/assets/fonts/Comfortaa-Regular.ttf new file mode 100644 index 00000000..ace7263e Binary files /dev/null and b/ephi_healthcare_worker_app/assets/fonts/Comfortaa-Regular.ttf differ diff --git a/ephi_healthcare_worker_app/assets/images/ephi.png b/ephi_healthcare_worker_app/assets/images/ephi.png new file mode 100644 index 00000000..11e9db9d Binary files /dev/null and b/ephi_healthcare_worker_app/assets/images/ephi.png differ diff --git a/ephi_healthcare_worker_app/assets/images/eskalate.png b/ephi_healthcare_worker_app/assets/images/eskalate.png new file mode 100644 index 00000000..fbd2aab0 Binary files /dev/null and b/ephi_healthcare_worker_app/assets/images/eskalate.png differ diff --git a/ephi_healthcare_worker_app/ios/.gitignore b/ephi_healthcare_worker_app/ios/.gitignore new file mode 100644 index 00000000..e96ef602 --- /dev/null +++ b/ephi_healthcare_worker_app/ios/.gitignore @@ -0,0 +1,32 @@ +*.mode1v3 +*.mode2v3 +*.moved-aside +*.pbxuser +*.perspectivev3 +**/*sync/ +.sconsign.dblite +.tags* +**/.vagrant/ +**/DerivedData/ +Icon? +**/Pods/ +**/.symlinks/ +profile +xcuserdata +**/.generated/ +Flutter/App.framework +Flutter/Flutter.framework +Flutter/Flutter.podspec +Flutter/Generated.xcconfig +Flutter/app.flx +Flutter/app.zip +Flutter/flutter_assets/ +Flutter/flutter_export_environment.sh +ServiceDefinitions.json +Runner/GeneratedPluginRegistrant.* + +# Exceptions to above rules. +!default.mode1v3 +!default.mode2v3 +!default.pbxuser +!default.perspectivev3 diff --git a/ephi_healthcare_worker_app/ios/Flutter/AppFrameworkInfo.plist b/ephi_healthcare_worker_app/ios/Flutter/AppFrameworkInfo.plist new file mode 100644 index 00000000..6b4c0f78 --- /dev/null +++ b/ephi_healthcare_worker_app/ios/Flutter/AppFrameworkInfo.plist @@ -0,0 +1,26 @@ + + + + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleExecutable + App + CFBundleIdentifier + io.flutter.flutter.app + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + App + CFBundlePackageType + FMWK + CFBundleShortVersionString + 1.0 + CFBundleSignature + ???? + CFBundleVersion + 1.0 + MinimumOSVersion + 8.0 + + diff --git a/ephi_healthcare_worker_app/ios/Flutter/Debug.xcconfig b/ephi_healthcare_worker_app/ios/Flutter/Debug.xcconfig new file mode 100644 index 00000000..592ceee8 --- /dev/null +++ b/ephi_healthcare_worker_app/ios/Flutter/Debug.xcconfig @@ -0,0 +1 @@ +#include "Generated.xcconfig" diff --git a/ephi_healthcare_worker_app/ios/Flutter/Release.xcconfig b/ephi_healthcare_worker_app/ios/Flutter/Release.xcconfig new file mode 100644 index 00000000..592ceee8 --- /dev/null +++ b/ephi_healthcare_worker_app/ios/Flutter/Release.xcconfig @@ -0,0 +1 @@ +#include "Generated.xcconfig" diff --git a/ephi_healthcare_worker_app/ios/Runner.xcodeproj/project.pbxproj b/ephi_healthcare_worker_app/ios/Runner.xcodeproj/project.pbxproj new file mode 100644 index 00000000..224d811e --- /dev/null +++ b/ephi_healthcare_worker_app/ios/Runner.xcodeproj/project.pbxproj @@ -0,0 +1,499 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 46; + objects = { + +/* Begin PBXBuildFile section */ + 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; + 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; + 978B8F6F1D3862AE00F588F7 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 7AFFD8EE1D35381100E5BB4D /* AppDelegate.m */; }; + 97C146F31CF9000F007C117D /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 97C146F21CF9000F007C117D /* main.m */; }; + 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; + 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; + 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; +/* End PBXBuildFile section */ + +/* Begin PBXCopyFilesBuildPhase section */ + 9705A1C41CF9048500538489 /* Embed Frameworks */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + ); + name = "Embed Frameworks"; + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXCopyFilesBuildPhase section */ + +/* Begin PBXFileReference section */ + 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; + 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; + 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; + 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; + 7AFFD8ED1D35381100E5BB4D /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = ""; }; + 7AFFD8EE1D35381100E5BB4D /* AppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = ""; }; + 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; + 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; + 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 97C146F21CF9000F007C117D /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; + 97C146FB1CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; + 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; + 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 97C146EB1CF9000F007C117D /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 9740EEB11CF90186004384FC /* Flutter */ = { + isa = PBXGroup; + children = ( + 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */, + 9740EEB21CF90195004384FC /* Debug.xcconfig */, + 7AFA3C8E1D35360C0083082E /* Release.xcconfig */, + 9740EEB31CF90195004384FC /* Generated.xcconfig */, + ); + name = Flutter; + sourceTree = ""; + }; + 97C146E51CF9000F007C117D = { + isa = PBXGroup; + children = ( + 9740EEB11CF90186004384FC /* Flutter */, + 97C146F01CF9000F007C117D /* Runner */, + 97C146EF1CF9000F007C117D /* Products */, + CF3B75C9A7D2FA2A4C99F110 /* Frameworks */, + ); + sourceTree = ""; + }; + 97C146EF1CF9000F007C117D /* Products */ = { + isa = PBXGroup; + children = ( + 97C146EE1CF9000F007C117D /* Runner.app */, + ); + name = Products; + sourceTree = ""; + }; + 97C146F01CF9000F007C117D /* Runner */ = { + isa = PBXGroup; + children = ( + 7AFFD8ED1D35381100E5BB4D /* AppDelegate.h */, + 7AFFD8EE1D35381100E5BB4D /* AppDelegate.m */, + 97C146FA1CF9000F007C117D /* Main.storyboard */, + 97C146FD1CF9000F007C117D /* Assets.xcassets */, + 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */, + 97C147021CF9000F007C117D /* Info.plist */, + 97C146F11CF9000F007C117D /* Supporting Files */, + 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */, + 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */, + ); + path = Runner; + sourceTree = ""; + }; + 97C146F11CF9000F007C117D /* Supporting Files */ = { + isa = PBXGroup; + children = ( + 97C146F21CF9000F007C117D /* main.m */, + ); + name = "Supporting Files"; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 97C146ED1CF9000F007C117D /* Runner */ = { + isa = PBXNativeTarget; + buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; + buildPhases = ( + 9740EEB61CF901F6004384FC /* Run Script */, + 97C146EA1CF9000F007C117D /* Sources */, + 97C146EB1CF9000F007C117D /* Frameworks */, + 97C146EC1CF9000F007C117D /* Resources */, + 9705A1C41CF9048500538489 /* Embed Frameworks */, + 3B06AD1E1E4923F5004D2608 /* Thin Binary */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = Runner; + productName = Runner; + productReference = 97C146EE1CF9000F007C117D /* Runner.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 97C146E61CF9000F007C117D /* Project object */ = { + isa = PBXProject; + attributes = { + LastUpgradeCheck = 1020; + ORGANIZATIONNAME = ""; + TargetAttributes = { + 97C146ED1CF9000F007C117D = { + CreatedOnToolsVersion = 7.3.1; + }; + }; + }; + buildConfigurationList = 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */; + compatibilityVersion = "Xcode 9.3"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = 97C146E51CF9000F007C117D; + productRefGroup = 97C146EF1CF9000F007C117D /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 97C146ED1CF9000F007C117D /* Runner */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 97C146EC1CF9000F007C117D /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */, + 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */, + 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */, + 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXShellScriptBuildPhase section */ + 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "Thin Binary"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; + }; + 9740EEB61CF901F6004384FC /* Run Script */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "Run Script"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; + }; +/* End PBXShellScriptBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 97C146EA1CF9000F007C117D /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 978B8F6F1D3862AE00F588F7 /* AppDelegate.m in Sources */, + 97C146F31CF9000F007C117D /* main.m in Sources */, + 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXVariantGroup section */ + 97C146FA1CF9000F007C117D /* Main.storyboard */ = { + isa = PBXVariantGroup; + children = ( + 97C146FB1CF9000F007C117D /* Base */, + ); + name = Main.storyboard; + sourceTree = ""; + }; + 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */ = { + isa = PBXVariantGroup; + children = ( + 97C147001CF9000F007C117D /* Base */, + ); + name = LaunchScreen.storyboard; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + 249021D3217E4FDB00AE95B9 /* Profile */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = iphoneos; + SUPPORTED_PLATFORMS = iphoneos; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + }; + name = Profile; + }; + 249021D4217E4FDB00AE95B9 /* Profile */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; + ENABLE_BITCODE = NO; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/Flutter", + ); + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/Flutter", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.example.ephiHealthcareWorkerApp; + PRODUCT_NAME = "$(TARGET_NAME)"; + VERSIONING_SYSTEM = "apple-generic"; + }; + name = Profile; + }; + 97C147031CF9000F007C117D /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + MTL_ENABLE_DEBUG_INFO = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + 97C147041CF9000F007C117D /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = iphoneos; + SUPPORTED_PLATFORMS = iphoneos; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + 97C147061CF9000F007C117D /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; + ENABLE_BITCODE = NO; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/Flutter", + ); + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/Flutter", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.example.ephiHealthcareWorkerApp; + PRODUCT_NAME = "$(TARGET_NAME)"; + VERSIONING_SYSTEM = "apple-generic"; + }; + name = Debug; + }; + 97C147071CF9000F007C117D /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; + ENABLE_BITCODE = NO; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/Flutter", + ); + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/Flutter", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.example.ephiHealthcareWorkerApp; + PRODUCT_NAME = "$(TARGET_NAME)"; + VERSIONING_SYSTEM = "apple-generic"; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 97C147031CF9000F007C117D /* Debug */, + 97C147041CF9000F007C117D /* Release */, + 249021D3217E4FDB00AE95B9 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 97C147061CF9000F007C117D /* Debug */, + 97C147071CF9000F007C117D /* Release */, + 249021D4217E4FDB00AE95B9 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 97C146E61CF9000F007C117D /* Project object */; +} diff --git a/ephi_healthcare_worker_app/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/ephi_healthcare_worker_app/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 00000000..1d526a16 --- /dev/null +++ b/ephi_healthcare_worker_app/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/ephi_healthcare_worker_app/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/ephi_healthcare_worker_app/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 00000000..18d98100 --- /dev/null +++ b/ephi_healthcare_worker_app/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/ephi_healthcare_worker_app/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/ephi_healthcare_worker_app/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings new file mode 100644 index 00000000..f9b0d7c5 --- /dev/null +++ b/ephi_healthcare_worker_app/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings @@ -0,0 +1,8 @@ + + + + + PreviewsEnabled + + + diff --git a/ephi_healthcare_worker_app/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/ephi_healthcare_worker_app/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme new file mode 100644 index 00000000..a28140cf --- /dev/null +++ b/ephi_healthcare_worker_app/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme @@ -0,0 +1,91 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ephi_healthcare_worker_app/ios/Runner.xcworkspace/contents.xcworkspacedata b/ephi_healthcare_worker_app/ios/Runner.xcworkspace/contents.xcworkspacedata new file mode 100644 index 00000000..1d526a16 --- /dev/null +++ b/ephi_healthcare_worker_app/ios/Runner.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/ephi_healthcare_worker_app/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/ephi_healthcare_worker_app/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 00000000..18d98100 --- /dev/null +++ b/ephi_healthcare_worker_app/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/ephi_healthcare_worker_app/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/ephi_healthcare_worker_app/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings new file mode 100644 index 00000000..f9b0d7c5 --- /dev/null +++ b/ephi_healthcare_worker_app/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings @@ -0,0 +1,8 @@ + + + + + PreviewsEnabled + + + diff --git a/ephi_healthcare_worker_app/ios/Runner/AppDelegate.h b/ephi_healthcare_worker_app/ios/Runner/AppDelegate.h new file mode 100644 index 00000000..36e21bbf --- /dev/null +++ b/ephi_healthcare_worker_app/ios/Runner/AppDelegate.h @@ -0,0 +1,6 @@ +#import +#import + +@interface AppDelegate : FlutterAppDelegate + +@end diff --git a/ephi_healthcare_worker_app/ios/Runner/AppDelegate.m b/ephi_healthcare_worker_app/ios/Runner/AppDelegate.m new file mode 100644 index 00000000..70e83933 --- /dev/null +++ b/ephi_healthcare_worker_app/ios/Runner/AppDelegate.m @@ -0,0 +1,13 @@ +#import "AppDelegate.h" +#import "GeneratedPluginRegistrant.h" + +@implementation AppDelegate + +- (BOOL)application:(UIApplication *)application + didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { + [GeneratedPluginRegistrant registerWithRegistry:self]; + // Override point for customization after application launch. + return [super application:application didFinishLaunchingWithOptions:launchOptions]; +} + +@end diff --git a/ephi_healthcare_worker_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json b/ephi_healthcare_worker_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 00000000..d36b1fab --- /dev/null +++ b/ephi_healthcare_worker_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,122 @@ +{ + "images" : [ + { + "size" : "20x20", + "idiom" : "iphone", + "filename" : "Icon-App-20x20@2x.png", + "scale" : "2x" + }, + { + "size" : "20x20", + "idiom" : "iphone", + "filename" : "Icon-App-20x20@3x.png", + "scale" : "3x" + }, + { + "size" : "29x29", + "idiom" : "iphone", + "filename" : "Icon-App-29x29@1x.png", + "scale" : "1x" + }, + { + "size" : "29x29", + "idiom" : "iphone", + "filename" : "Icon-App-29x29@2x.png", + "scale" : "2x" + }, + { + "size" : "29x29", + "idiom" : "iphone", + "filename" : "Icon-App-29x29@3x.png", + "scale" : "3x" + }, + { + "size" : "40x40", + "idiom" : "iphone", + "filename" : "Icon-App-40x40@2x.png", + "scale" : "2x" + }, + { + "size" : "40x40", + "idiom" : "iphone", + "filename" : "Icon-App-40x40@3x.png", + "scale" : "3x" + }, + { + "size" : "60x60", + "idiom" : "iphone", + "filename" : "Icon-App-60x60@2x.png", + "scale" : "2x" + }, + { + "size" : "60x60", + "idiom" : "iphone", + "filename" : "Icon-App-60x60@3x.png", + "scale" : "3x" + }, + { + "size" : "20x20", + "idiom" : "ipad", + "filename" : "Icon-App-20x20@1x.png", + "scale" : "1x" + }, + { + "size" : "20x20", + "idiom" : "ipad", + "filename" : "Icon-App-20x20@2x.png", + "scale" : "2x" + }, + { + "size" : "29x29", + "idiom" : "ipad", + "filename" : "Icon-App-29x29@1x.png", + "scale" : "1x" + }, + { + "size" : "29x29", + "idiom" : "ipad", + "filename" : "Icon-App-29x29@2x.png", + "scale" : "2x" + }, + { + "size" : "40x40", + "idiom" : "ipad", + "filename" : "Icon-App-40x40@1x.png", + "scale" : "1x" + }, + { + "size" : "40x40", + "idiom" : "ipad", + "filename" : "Icon-App-40x40@2x.png", + "scale" : "2x" + }, + { + "size" : "76x76", + "idiom" : "ipad", + "filename" : "Icon-App-76x76@1x.png", + "scale" : "1x" + }, + { + "size" : "76x76", + "idiom" : "ipad", + "filename" : "Icon-App-76x76@2x.png", + "scale" : "2x" + }, + { + "size" : "83.5x83.5", + "idiom" : "ipad", + "filename" : "Icon-App-83.5x83.5@2x.png", + "scale" : "2x" + }, + { + "size" : "1024x1024", + "idiom" : "ios-marketing", + "filename" : "Icon-App-1024x1024@1x.png", + "scale" : "1x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} diff --git a/ephi_healthcare_worker_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png b/ephi_healthcare_worker_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png new file mode 100644 index 00000000..dc9ada47 Binary files /dev/null and b/ephi_healthcare_worker_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png differ diff --git a/ephi_healthcare_worker_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png b/ephi_healthcare_worker_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png new file mode 100644 index 00000000..28c6bf03 Binary files /dev/null and b/ephi_healthcare_worker_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png differ diff --git a/ephi_healthcare_worker_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png b/ephi_healthcare_worker_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png new file mode 100644 index 00000000..2ccbfd96 Binary files /dev/null and b/ephi_healthcare_worker_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png differ diff --git a/ephi_healthcare_worker_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png b/ephi_healthcare_worker_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png new file mode 100644 index 00000000..f091b6b0 Binary files /dev/null and b/ephi_healthcare_worker_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png differ diff --git a/ephi_healthcare_worker_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png b/ephi_healthcare_worker_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png new file mode 100644 index 00000000..4cde1211 Binary files /dev/null and b/ephi_healthcare_worker_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png differ diff --git a/ephi_healthcare_worker_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png b/ephi_healthcare_worker_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png new file mode 100644 index 00000000..d0ef06e7 Binary files /dev/null and b/ephi_healthcare_worker_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png differ diff --git a/ephi_healthcare_worker_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png b/ephi_healthcare_worker_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png new file mode 100644 index 00000000..dcdc2306 Binary files /dev/null and b/ephi_healthcare_worker_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png differ diff --git a/ephi_healthcare_worker_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png b/ephi_healthcare_worker_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png new file mode 100644 index 00000000..2ccbfd96 Binary files /dev/null and b/ephi_healthcare_worker_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png differ diff --git a/ephi_healthcare_worker_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png b/ephi_healthcare_worker_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png new file mode 100644 index 00000000..c8f9ed8f Binary files /dev/null and b/ephi_healthcare_worker_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png differ diff --git a/ephi_healthcare_worker_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png b/ephi_healthcare_worker_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png new file mode 100644 index 00000000..a6d6b860 Binary files /dev/null and b/ephi_healthcare_worker_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png differ diff --git a/ephi_healthcare_worker_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png b/ephi_healthcare_worker_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png new file mode 100644 index 00000000..a6d6b860 Binary files /dev/null and b/ephi_healthcare_worker_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png differ diff --git a/ephi_healthcare_worker_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png b/ephi_healthcare_worker_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png new file mode 100644 index 00000000..75b2d164 Binary files /dev/null and b/ephi_healthcare_worker_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png differ diff --git a/ephi_healthcare_worker_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png b/ephi_healthcare_worker_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png new file mode 100644 index 00000000..c4df70d3 Binary files /dev/null and b/ephi_healthcare_worker_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png differ diff --git a/ephi_healthcare_worker_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png b/ephi_healthcare_worker_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png new file mode 100644 index 00000000..6a84f41e Binary files /dev/null and b/ephi_healthcare_worker_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png differ diff --git a/ephi_healthcare_worker_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png b/ephi_healthcare_worker_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png new file mode 100644 index 00000000..d0e1f585 Binary files /dev/null and b/ephi_healthcare_worker_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png differ diff --git a/ephi_healthcare_worker_app/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json b/ephi_healthcare_worker_app/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json new file mode 100644 index 00000000..0bedcf2f --- /dev/null +++ b/ephi_healthcare_worker_app/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "idiom" : "universal", + "filename" : "LaunchImage.png", + "scale" : "1x" + }, + { + "idiom" : "universal", + "filename" : "LaunchImage@2x.png", + "scale" : "2x" + }, + { + "idiom" : "universal", + "filename" : "LaunchImage@3x.png", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} diff --git a/ephi_healthcare_worker_app/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png b/ephi_healthcare_worker_app/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png new file mode 100644 index 00000000..9da19eac Binary files /dev/null and b/ephi_healthcare_worker_app/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png differ diff --git a/ephi_healthcare_worker_app/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png b/ephi_healthcare_worker_app/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png new file mode 100644 index 00000000..9da19eac Binary files /dev/null and b/ephi_healthcare_worker_app/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png differ diff --git a/ephi_healthcare_worker_app/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png b/ephi_healthcare_worker_app/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png new file mode 100644 index 00000000..9da19eac Binary files /dev/null and b/ephi_healthcare_worker_app/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png differ diff --git a/ephi_healthcare_worker_app/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md b/ephi_healthcare_worker_app/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md new file mode 100644 index 00000000..89c2725b --- /dev/null +++ b/ephi_healthcare_worker_app/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md @@ -0,0 +1,5 @@ +# Launch Screen Assets + +You can customize the launch screen with your own desired assets by replacing the image files in this directory. + +You can also do it by opening your Flutter project's Xcode project with `open ios/Runner.xcworkspace`, selecting `Runner/Assets.xcassets` in the Project Navigator and dropping in the desired images. \ No newline at end of file diff --git a/ephi_healthcare_worker_app/ios/Runner/Base.lproj/LaunchScreen.storyboard b/ephi_healthcare_worker_app/ios/Runner/Base.lproj/LaunchScreen.storyboard new file mode 100644 index 00000000..f2e259c7 --- /dev/null +++ b/ephi_healthcare_worker_app/ios/Runner/Base.lproj/LaunchScreen.storyboard @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ephi_healthcare_worker_app/ios/Runner/Base.lproj/Main.storyboard b/ephi_healthcare_worker_app/ios/Runner/Base.lproj/Main.storyboard new file mode 100644 index 00000000..f3c28516 --- /dev/null +++ b/ephi_healthcare_worker_app/ios/Runner/Base.lproj/Main.storyboard @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ephi_healthcare_worker_app/ios/Runner/Info.plist b/ephi_healthcare_worker_app/ios/Runner/Info.plist new file mode 100644 index 00000000..487e551d --- /dev/null +++ b/ephi_healthcare_worker_app/ios/Runner/Info.plist @@ -0,0 +1,45 @@ + + + + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + ephi_healthcare_worker_app + CFBundlePackageType + APPL + CFBundleShortVersionString + $(FLUTTER_BUILD_NAME) + CFBundleSignature + ???? + CFBundleVersion + $(FLUTTER_BUILD_NUMBER) + LSRequiresIPhoneOS + + UILaunchStoryboardName + LaunchScreen + UIMainStoryboardFile + Main + UISupportedInterfaceOrientations + + UIInterfaceOrientationPortrait + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + UISupportedInterfaceOrientations~ipad + + UIInterfaceOrientationPortrait + UIInterfaceOrientationPortraitUpsideDown + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + UIViewControllerBasedStatusBarAppearance + + + diff --git a/ephi_healthcare_worker_app/ios/Runner/main.m b/ephi_healthcare_worker_app/ios/Runner/main.m new file mode 100644 index 00000000..dff6597e --- /dev/null +++ b/ephi_healthcare_worker_app/ios/Runner/main.m @@ -0,0 +1,9 @@ +#import +#import +#import "AppDelegate.h" + +int main(int argc, char* argv[]) { + @autoreleasepool { + return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); + } +} diff --git a/ephi_healthcare_worker_app/lib/components/alreadyHaveAnAccountCheck.dart b/ephi_healthcare_worker_app/lib/components/alreadyHaveAnAccountCheck.dart new file mode 100644 index 00000000..828d613f --- /dev/null +++ b/ephi_healthcare_worker_app/lib/components/alreadyHaveAnAccountCheck.dart @@ -0,0 +1,37 @@ +import 'package:flutter/material.dart'; +//import 'package:flutter_auth/constants.dart'; +//import 'package:flutter_auth/flutter_auth.dart'; + +class AlreadyHaveAnAccountCheck extends StatelessWidget { + final Color color; + final bool login; + final Function press; + const AlreadyHaveAnAccountCheck({ + Key key, + this.login = true, + this.press, this.color, + }) : super(key: key); + + @override + Widget build(BuildContext context) { + return Row( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Text( + login ? "Don’t have an Account ? " : "Already have an Account ? ", + style: TextStyle(color: color), + ), + GestureDetector( + onTap: press, + child: Text( + login ? "Sign Up" : "Sign In", + style: TextStyle( + color: color, + fontWeight: FontWeight.bold, + ), + ), + ) + ], + ); + } +} \ No newline at end of file diff --git a/ephi_healthcare_worker_app/lib/components/roundedButton.dart b/ephi_healthcare_worker_app/lib/components/roundedButton.dart new file mode 100644 index 00000000..ac76b7aa --- /dev/null +++ b/ephi_healthcare_worker_app/lib/components/roundedButton.dart @@ -0,0 +1,54 @@ +import 'package:flutter/material.dart'; + +class RoundedButton extends StatelessWidget { + final String text; + final Function press; + final Color color, textColor; + + const RoundedButton({ + Key key, + this.text, + this.press, + this.color, + this.textColor = Colors.white, + }) : super(key: key); + + @override + Widget build(BuildContext context) { + Size size = MediaQuery.of(context).size; + return ButtonTheme( + minWidth: size.width * 0.8, + height: size.width * 0.15, + child: RaisedButton( + color: color, + shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(40)), + onPressed: () {}, + child: Text( + text, + textAlign: TextAlign.center, + style: TextStyle( + + color: Colors.white, + fontSize: 16.0, + ) + ), + ), + ); +// return Container( +// margin: EdgeInsets.symmetric(vertical: 10), +// width: size.width * 0.8, +// child: ClipRRect( +// borderRadius: BorderRadius.circular(29), +// child: FlatButton( +// padding: EdgeInsets.symmetric(vertical: 20, horizontal: 40), +// color: color, +// onPressed: press, +// child: Text( +// text, +// style: TextStyle(color: textColor), +// ), +// ), +// ), +// ); + } +} diff --git a/ephi_healthcare_worker_app/lib/components/roundedInputField.dart b/ephi_healthcare_worker_app/lib/components/roundedInputField.dart new file mode 100644 index 00000000..6c565354 --- /dev/null +++ b/ephi_healthcare_worker_app/lib/components/roundedInputField.dart @@ -0,0 +1,32 @@ +import 'textFieldContainer.dart'; +import 'package:flutter/material.dart'; + +class RoundedInputField extends StatelessWidget { + final bool signIn; + final Color color; + final String hintText; + final IconData icon; + final ValueChanged onChanged; + const RoundedInputField({ + Key key, + this.hintText, + this.icon = Icons.person, + this.onChanged, this.color, this.signIn = true, + }) : super(key: key); + @override + Widget build(BuildContext context) { + return TextFieldContainer( + signIn: this.signIn, + child: TextField( + onChanged: onChanged, + decoration: InputDecoration( + icon: Icon( + icon, + color: color, + ), + hintText: hintText, + border: InputBorder.none), + ), + ); + } +} \ No newline at end of file diff --git a/ephi_healthcare_worker_app/lib/components/roundedPasswordField.dart b/ephi_healthcare_worker_app/lib/components/roundedPasswordField.dart new file mode 100644 index 00000000..28d39e52 --- /dev/null +++ b/ephi_healthcare_worker_app/lib/components/roundedPasswordField.dart @@ -0,0 +1,35 @@ +import 'textFieldContainer.dart'; +import 'package:flutter/material.dart'; + +class RoundedPasswordField extends StatelessWidget { + final bool signIn; + final ValueChanged onChanged; + final IconData icon; + final Color color; + const RoundedPasswordField({ + Key key, + this.icon, + this.onChanged, this.color, this.signIn = true, + }) : super(key: key); + @override + Widget build(BuildContext context) { + return TextFieldContainer( + signIn: this.signIn, + child: TextField( + obscureText: true, + onChanged: onChanged, + decoration: InputDecoration( + hintText: "Password", + icon: Icon( + Icons.lock, + color: color, + ), + suffixIcon: Icon( + Icons.visibility, + color: color, + ), + border: InputBorder.none), + ), + ); + } +} \ No newline at end of file diff --git a/ephi_healthcare_worker_app/lib/components/textFieldContainer.dart b/ephi_healthcare_worker_app/lib/components/textFieldContainer.dart new file mode 100644 index 00000000..b494c4ed --- /dev/null +++ b/ephi_healthcare_worker_app/lib/components/textFieldContainer.dart @@ -0,0 +1,19 @@ +import 'package:flutter/material.dart'; + +class TextFieldContainer extends StatelessWidget { + final bool signIn; + final Widget child; + const TextFieldContainer({Key key, this.child, this.signIn = true}) : super(key: key); + @override + Widget build(BuildContext context) { + return Container( + width: 333, + height: 60, + padding: EdgeInsets.symmetric(horizontal: 20, vertical: 5), + decoration: BoxDecoration( + color: signIn ? Colors.lightBlue[100] : Colors.lightGreenAccent[100], + borderRadius: BorderRadius.circular(30)), + child: child, + ); + } +} \ No newline at end of file diff --git a/ephi_healthcare_worker_app/lib/main.dart b/ephi_healthcare_worker_app/lib/main.dart new file mode 100644 index 00000000..397da74a --- /dev/null +++ b/ephi_healthcare_worker_app/lib/main.dart @@ -0,0 +1,33 @@ +// This application is developed for ethiopian public health institute and Healthcare Workers. +// Made with ❤ since 2019 in Ethiopia, Turkey and USA by the Eskalate team. +// Eskalate LLC is a American company. +// Copyright © 2020 Eskalate. All rights reserved. +// Mobile Team + +// Main Themes for Both Anroid and IOS Devices +import 'package:flutter/cupertino.dart'; +import 'package:flutter/material.dart'; + +// Welcome Page +import 'pages/welcome.dart'; + +void main() => runApp(MaterialApp( + // Sets a font as the default globally + theme: ThemeData(fontFamily: 'Comfortaa'), + debugShowCheckedModeBanner: false, + home: Main(), +)); + +class Main extends StatelessWidget { + @override + Widget build(BuildContext context) { + return Scaffold( + backgroundColor: Colors.amber[50], + body: WelcomePage(), +// appBar: AppBar( +// title: Text("EPHI Healthcare Workers App"), +// centerTitle: true, +// backgroundColor: Colors.blue,) + ); + } +} \ No newline at end of file diff --git a/ephi_healthcare_worker_app/lib/pages/confirmation.dart b/ephi_healthcare_worker_app/lib/pages/confirmation.dart new file mode 100644 index 00000000..612d7967 --- /dev/null +++ b/ephi_healthcare_worker_app/lib/pages/confirmation.dart @@ -0,0 +1,75 @@ +import 'package:flutter/cupertino.dart'; +import 'package:flutter/material.dart'; + +class LoginPage extends StatelessWidget { + @override + Widget build(BuildContext context) { + // Provides us total height and width of our screen + Size size = MediaQuery.of(context).size; + return Scaffold( +// backgroundColor: Colors.amber[50], + backgroundColor: Colors.white, +// appBar: AppBar( +// title: Text('Gazetem Mobil Uygulaması'), +// centerTitle: true, +// backgroundColor: Colors.redAccent, +// ), + body: Center( + child: Padding( + padding: EdgeInsets.all(30.0), + child: Column( + children: [ + SizedBox(height: size.height * 0.03), + Text( + 'Enter Confirmation Code Sent To Your Email', + textAlign: TextAlign.center, + style: TextStyle( + shadows: [ + Shadow( + offset: Offset(2.0, 2.0), + blurRadius: 7.0, + color: Color.fromARGB(45, 0, 0, 0), + ), + ], +// color: Colors.lightBlue, + color: Colors.lightBlue, + fontSize: 20.0, + )), + SizedBox(height: size.height * 0.05), + + + + SizedBox(height: size.height * 0.05), + ButtonTheme( + minWidth: size.width * 0.8, + height: size.width * 0.15, + child: RaisedButton( + color: Colors.lightBlue, + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(40)), + onPressed: () { +// Navigator.push( +// context, +// MaterialPageRoute( +// builder: (context) { +// return CreateAccountScreen(); +// }, +// ), +// ); + }, + child: Text('CONFIRMATION', + textAlign: TextAlign.center, + style: TextStyle( + color: Colors.white, + fontSize: 16.0, + )), + ), + ), + SizedBox(height: size.height * 0.025), + ], + ), + ), + ), + ); + } +} \ No newline at end of file diff --git a/ephi_healthcare_worker_app/lib/pages/createAccount.dart b/ephi_healthcare_worker_app/lib/pages/createAccount.dart new file mode 100644 index 00000000..e391c9e5 --- /dev/null +++ b/ephi_healthcare_worker_app/lib/pages/createAccount.dart @@ -0,0 +1,182 @@ +import 'package:ephi_healthcare_worker_app/components/alreadyHaveAnAccountCheck.dart'; +import 'package:ephi_healthcare_worker_app/components/roundedButton.dart'; +import 'package:flutter/cupertino.dart'; +import 'package:flutter/material.dart'; + +// Components +import '../components/roundedPasswordField.dart'; +import '../components/roundedInputField.dart'; +import 'login.dart'; +//import 'package:email_validator/email_validator.dart'; + +class CreateAccountPage extends StatelessWidget { + @override + Widget build(BuildContext context) { + // Provides us total height and width of our screen + Size size = MediaQuery.of(context).size; + return Scaffold( +// backgroundColor: Colors.amber[50], + backgroundColor: Colors.white, +// appBar: AppBar( +// title: Text('Gazetem Mobil Uygulaması'), +// centerTitle: true, +// backgroundColor: Colors.redAccent, +// ), + body: Center( + child: Padding( + padding: EdgeInsets.all(30.0), + child: Column( + children: [ + SizedBox(height: size.height * 0.03), + Text('Create Healtcare Worker Account', + textAlign: TextAlign.center, + style: TextStyle( + shadows: [ + Shadow( + offset: Offset(2.0, 2.0), + blurRadius: 7.0, + color: Color.fromARGB(45, 0, 0, 0), + ), + ], +// color: Colors.lightBlue, + color: Colors.lightGreenAccent[700], + fontSize: 20.0, + )), + SizedBox(height: size.height * 0.05), + RoundedInputField( + signIn: false, + hintText: "Healthcare Worker Full Name", + onChanged: (value) {}, + ), + SizedBox(height: size.height * 0.02), + RoundedInputField( + signIn: false, + hintText: "Email", + onChanged: (value) {}, + icon: Icons.email, + ), + SizedBox(height: size.height * 0.02), + RoundedPasswordField(onChanged: (value) {}, signIn: false), + SizedBox(height: size.height * 0.02), + AlreadyHaveAnAccountCheck( + color: Colors.grey[600], + login: false, + press: () { + Navigator.push( + context, + MaterialPageRoute(builder: (context) { + return LoginPage(); + }), + ); + }), + SizedBox(height: size.height * 0.05), + RoundedButton( + color: Colors.lightGreenAccent[700], + text: "CREATE ACCOUNT", + press: () {}), +// ButtonTheme( +// minWidth: size.width * 0.8, +// height: size.width * 0.15, +// child: RaisedButton( +// color: Colors.lightGreenAccent[700], +// shape: RoundedRectangleBorder( +// borderRadius: BorderRadius.circular(40) +// ), +// onPressed: () { +//// Navigator.push( +//// context, +//// MaterialPageRoute( +//// builder: (context) { +//// return CreateAccountScreen(); +//// }, +//// ), +//// ); +// }, +// child: Text('CREATE ACCOUNT', +// textAlign: TextAlign.center, +// style: TextStyle( +// color: Colors.white, +// fontSize: 16.0, +// )), +// ), +// ), + SizedBox(height: size.height * 0.025), + ], + ), + ), + ), + ); + } +} + +//class CreateAccountPage extends StatefulWidget { +// @override +// _CreateAccountPage createState() => _CreateAccountPage(); +//} + +//class _CreateAccountPage extends State { +// final formKey = GlobalKey(); +// final scaffoldKey = GlobalKey(); +// +// String _email; +// String _password; +// +// void _submitCommand() { +// final form = formKey.currentState; +// +// if (form.validate()) { +// form.save(); +// +// // Email & password matched our validation rules +// // and are saved to _email and _password fields. +// _loginCommand(); +// } +// } +// +// void _loginCommand() { +// // This is just a demo, so no actual login here. +// final snackbar = SnackBar( +// content: Text('Email: $_email, password: $_password'), +// ); +// +// scaffoldKey.currentState.showSnackBar(snackbar); +// } +// +// @override +// Widget build(BuildContext context) { +// return Scaffold( +// key: scaffoldKey, +// appBar: AppBar( +// title: Text('Email validation example'), +// ), +// body: Padding( +// padding: const EdgeInsets.all(16.0), +// child: Form( +// key: formKey, +// child: Column( +// children: [ +// TextFormField( +// decoration: InputDecoration(labelText: 'Email'), +// validator: (val) => !EmailValidator.validate(val, true) +// ? 'Not a valid email.' +// : null, +// onSaved: (val) => _email = val, +// ), +// TextFormField( +// decoration: InputDecoration(labelText: 'Password'), +// validator: (val) => +// val.length < 4 ? 'Password too short..' : null, +// onSaved: (val) => _password = val, +// obscureText: true, +// ), +// RaisedButton( +// onPressed: _submitCommand, +// child: Text('Sign in'), +// ), +// ], +// ), +// ), +// ), +// ); +// } +//} diff --git a/ephi_healthcare_worker_app/lib/pages/login.dart b/ephi_healthcare_worker_app/lib/pages/login.dart new file mode 100644 index 00000000..861811b1 --- /dev/null +++ b/ephi_healthcare_worker_app/lib/pages/login.dart @@ -0,0 +1,96 @@ +import '../components/alreadyHaveAnAccountCheck.dart'; +import '../components/roundedInputField.dart'; +import '../components/roundedPasswordField.dart'; +import 'package:flutter/cupertino.dart'; +import 'package:flutter/material.dart'; + +import 'createAccount.dart'; + +class LoginPage extends StatelessWidget { + @override + Widget build(BuildContext context) { + // Provides us total height and width of our screen + Size size = MediaQuery.of(context).size; + return Scaffold( +// backgroundColor: Colors.amber[50], + backgroundColor: Colors.white, +// appBar: AppBar( +// title: Text('Gazetem Mobil Uygulaması'), +// centerTitle: true, +// backgroundColor: Colors.redAccent, +// ), + body: Center( + child: Padding( + padding: EdgeInsets.all(30.0), + child: Column( + children: [ + SizedBox(height: size.height * 0.03), + Text('Sign In To Your Account', + textAlign: TextAlign.center, + style: TextStyle( + shadows: [ + Shadow( + offset: Offset(2.0, 2.0), + blurRadius: 7.0, + color: Color.fromARGB(45, 0, 0, 0), + ), + ], +// color: Colors.lightBlue, + color: Colors.lightBlue, + fontSize: 20.0, + )), + SizedBox(height: size.height * 0.05), + RoundedInputField( + hintText: "Email", + onChanged: (value) {}, + icon: Icons.email, + ), + SizedBox(height: size.height * 0.02), + RoundedPasswordField(onChanged: (value) {}), + SizedBox(height: size.height * 0.02), + AlreadyHaveAnAccountCheck( + color: Colors.grey[600], + login: true, + press: () { + Navigator.push( + context, + MaterialPageRoute(builder: (context) { + return CreateAccountPage(); + }), + ); + }), + SizedBox(height: size.height * 0.05), + SizedBox(height: size.height * 0.05), + ButtonTheme( + minWidth: size.width * 0.8, + height: size.width * 0.15, + child: RaisedButton( + color: Colors.lightBlue, + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(40)), + onPressed: () { +// Navigator.push( +// context, +// MaterialPageRoute( +// builder: (context) { +// return CreateAccountScreen(); +// }, +// ), +// ); + }, + child: Text('SIGN IN', + textAlign: TextAlign.center, + style: TextStyle( + color: Colors.white, + fontSize: 16.0, + )), + ), + ), + SizedBox(height: size.height * 0.025), + ], + ), + ), + ), + ); + } +} \ No newline at end of file diff --git a/ephi_healthcare_worker_app/lib/pages/welcome.dart b/ephi_healthcare_worker_app/lib/pages/welcome.dart new file mode 100644 index 00000000..6db8d51e --- /dev/null +++ b/ephi_healthcare_worker_app/lib/pages/welcome.dart @@ -0,0 +1,141 @@ +import 'package:flutter/cupertino.dart'; +import 'package:flutter/material.dart'; + +// Login Page +import 'createAccount.dart'; +import 'login.dart'; + +class WelcomePage extends StatelessWidget { + @override + Widget build(BuildContext context) { + // Provides us total height and width of our screen + Size size = MediaQuery.of(context).size; + return Scaffold( +// backgroundColor: Colors.amber[50], + backgroundColor: Colors.white, +// appBar: AppBar( +// title: Text('Gazetem Mobil Uygulaması'), +// centerTitle: true, +// backgroundColor: Colors.redAccent, +// ), + body: Center( + child: Padding( + padding: EdgeInsets.all(30.0), + child: Column( + children: [ + SizedBox(height: size.height * 0.03), +// Image.asset('assets/images/eskalate.png', width: 230, height: 230), + Text( +// 'Ethiopian Public Health Institute COVID-19 Application', + 'Ethiopian Public Health Institute COVID-19 Application', + textAlign: TextAlign.center, + style: TextStyle( + shadows: [ + Shadow( + offset: Offset(2.0, 2.0), + blurRadius: 7.0, + color: Color.fromARGB(45, 0, 0, 0), + ), + ], + color: Colors.lightBlue, + fontSize: 32.0, + )), + SizedBox(height: size.height * 0.1), + Text('Welcome!', + textAlign: TextAlign.center, + style: TextStyle( + shadows: [ + Shadow( + offset: Offset(2.0, 2.0), + blurRadius: 7.0, + color: Color.fromARGB(45, 0, 0, 0), + ), + ], + color: Colors.lightBlue, + fontSize: 32.0, + )), + SizedBox(height: size.height * 0.05), +// Divider(), + Center( + child: Material( + // with Material + child: Image.asset('assets/images/ephi.png', + width: 330, height: 80), + elevation: 5.0, + clipBehavior: Clip.antiAlias, + ), + ), + SizedBox(height: size.height * 0.05), + ButtonTheme( + minWidth: size.width * 0.8, + height: size.width * 0.15, + child: RaisedButton( + color: Colors.lightGreenAccent[700], + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(40)), + onPressed: () { + Navigator.push( + context, + MaterialPageRoute( + builder: (context) { + return CreateAccountPage(); + }, + ), + ); + }, + child: Text('CREATE ACCOUNT', + textAlign: TextAlign.center, + style: TextStyle( + color: Colors.white, + fontSize: 16.0, + )), + ), + ), + SizedBox(height: size.height * 0.025), + ButtonTheme( + minWidth: size.width * 0.8, + height: size.width * 0.15, + child: RaisedButton( + color: Colors.lightBlue, + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(40)), + onPressed: () { + Navigator.push( + context, + MaterialPageRoute( + builder: (context) { + return LoginPage(); + }, + ), + ); + }, + child: Text('SIGN IN', + textAlign: TextAlign.center, + style: TextStyle( + color: Colors.white, + fontSize: 16.0, + )), + ), + ), +// Text('Eskalate LLC™. 2020 All Rights Reserved.', +// textAlign: TextAlign.center, +// style: TextStyle( +// color: Colors.black, +// fontSize: 14.0, +// )), +// Row( +// mainAxisAlignment: MainAxisAlignment.center, +// children: [ +// Icon(Icons.mail), +// Text("contact@eskalate.io", textAlign: TextAlign.right), +// ], +// ), +// Image.asset('assets/images/eskalate.png', +// width: 100, height: 110), + ], + ), + ), + ), + ); + } +} \ No newline at end of file diff --git a/ephi_healthcare_worker_app/pubspec.lock b/ephi_healthcare_worker_app/pubspec.lock new file mode 100644 index 00000000..b6489c51 --- /dev/null +++ b/ephi_healthcare_worker_app/pubspec.lock @@ -0,0 +1,188 @@ +# Generated by pub +# See https://dart.dev/tools/pub/glossary#lockfile +packages: + archive: + dependency: transitive + description: + name: archive + url: "https://pub.dartlang.org" + source: hosted + version: "2.0.13" + args: + dependency: transitive + description: + name: args + url: "https://pub.dartlang.org" + source: hosted + version: "1.6.0" + async: + dependency: transitive + description: + name: async + url: "https://pub.dartlang.org" + source: hosted + version: "2.4.1" + boolean_selector: + dependency: transitive + description: + name: boolean_selector + url: "https://pub.dartlang.org" + source: hosted + version: "2.0.0" + charcode: + dependency: transitive + description: + name: charcode + url: "https://pub.dartlang.org" + source: hosted + version: "1.1.3" + collection: + dependency: transitive + description: + name: collection + url: "https://pub.dartlang.org" + source: hosted + version: "1.14.12" + convert: + dependency: transitive + description: + name: convert + url: "https://pub.dartlang.org" + source: hosted + version: "2.1.1" + crypto: + dependency: transitive + description: + name: crypto + url: "https://pub.dartlang.org" + source: hosted + version: "2.1.4" + cupertino_icons: + dependency: "direct main" + description: + name: cupertino_icons + url: "https://pub.dartlang.org" + source: hosted + version: "0.1.3" + flutter: + dependency: "direct main" + description: flutter + source: sdk + version: "0.0.0" + flutter_test: + dependency: "direct dev" + description: flutter + source: sdk + version: "0.0.0" + image: + dependency: transitive + description: + name: image + url: "https://pub.dartlang.org" + source: hosted + version: "2.1.12" + matcher: + dependency: transitive + description: + name: matcher + url: "https://pub.dartlang.org" + source: hosted + version: "0.12.6" + meta: + dependency: transitive + description: + name: meta + url: "https://pub.dartlang.org" + source: hosted + version: "1.1.8" + path: + dependency: transitive + description: + name: path + url: "https://pub.dartlang.org" + source: hosted + version: "1.6.4" + petitparser: + dependency: transitive + description: + name: petitparser + url: "https://pub.dartlang.org" + source: hosted + version: "2.4.0" + quiver: + dependency: transitive + description: + name: quiver + url: "https://pub.dartlang.org" + source: hosted + version: "2.1.3" + sky_engine: + dependency: transitive + description: flutter + source: sdk + version: "0.0.99" + source_span: + dependency: transitive + description: + name: source_span + url: "https://pub.dartlang.org" + source: hosted + version: "1.7.0" + stack_trace: + dependency: transitive + description: + name: stack_trace + url: "https://pub.dartlang.org" + source: hosted + version: "1.9.3" + stream_channel: + dependency: transitive + description: + name: stream_channel + url: "https://pub.dartlang.org" + source: hosted + version: "2.0.0" + string_scanner: + dependency: transitive + description: + name: string_scanner + url: "https://pub.dartlang.org" + source: hosted + version: "1.0.5" + term_glyph: + dependency: transitive + description: + name: term_glyph + url: "https://pub.dartlang.org" + source: hosted + version: "1.1.0" + test_api: + dependency: transitive + description: + name: test_api + url: "https://pub.dartlang.org" + source: hosted + version: "0.2.15" + typed_data: + dependency: transitive + description: + name: typed_data + url: "https://pub.dartlang.org" + source: hosted + version: "1.1.6" + vector_math: + dependency: transitive + description: + name: vector_math + url: "https://pub.dartlang.org" + source: hosted + version: "2.0.8" + xml: + dependency: transitive + description: + name: xml + url: "https://pub.dartlang.org" + source: hosted + version: "3.6.1" +sdks: + dart: ">=2.7.0 <3.0.0" diff --git a/ephi_healthcare_worker_app/pubspec.yaml b/ephi_healthcare_worker_app/pubspec.yaml new file mode 100644 index 00000000..a8e1197a --- /dev/null +++ b/ephi_healthcare_worker_app/pubspec.yaml @@ -0,0 +1,87 @@ +name: ephi_healthcare_worker_app +description: EPHI healthcare workers mobile app + +# The following line prevents the package from being accidentally published to +# pub.dev using `pub publish`. This is preferred for private packages. +publish_to: 'none' # Remove this line if you wish to publish to pub.dev + +# The following defines the version and build number for your application. +# A version number is three numbers separated by dots, like 1.2.43 +# followed by an optional build number separated by a +. +# Both the version and the builder number may be overridden in flutter +# build by specifying --build-name and --build-number, respectively. +# In Android, build-name is used as versionName while build-number used as versionCode. +# Read more about Android versioning at https://developer.android.com/studio/publish/versioning +# In iOS, build-name is used as CFBundleShortVersionString while build-number used as CFBundleVersion. +# Read more about iOS versioning at +# https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html +version: 1.0.0+1 + +environment: + sdk: ">=2.7.0 <3.0.0" + +dependencies: +# email_validator: '^1.0.0' +# flutter_auth: ^0.0.1 + flutter: + sdk: flutter + + + # The following adds the Cupertino Icons font to your application. + # Use with the CupertinoIcons class for iOS style icons. + cupertino_icons: ^0.1.3 + +dev_dependencies: + flutter_test: + sdk: flutter + +# For information on the generic Dart part of this file, see the +# following page: https://dart.dev/tools/pub/pubspec + +# The following section is specific to Flutter. +flutter: + + # The following line ensures that the Material Icons font is + # included with your application, so that you can use the icons in + # the material Icons class. + uses-material-design: true + + + + # To add assets to your application, add an assets section, like this: + # assets: + # - images/a_dot_burr.jpeg + # - images/a_dot_ham.jpeg + assets: + - assets/images/ + + # An image asset can refer to one or more resolution-specific "variants", see + # https://flutter.dev/assets-and-images/#resolution-aware. + + # For details regarding adding assets from package dependencies, see + # https://flutter.dev/assets-and-images/#from-packages + + # To add custom fonts to your application, add a fonts section here, + # in this "flutter" section. Each entry in this list should have a + # "family" key with the font family name, and a "fonts" key with a + # list giving the asset and other descriptors for the font. For + # example: + # fonts: + # - family: Schyler + # fonts: + # - asset: fonts/Schyler-Regular.ttf + # - asset: fonts/Schyler-Italic.ttf + # style: italic + # - family: Trajan Pro + # fonts: + # - asset: fonts/TrajanPro.ttf + # - asset: fonts/TrajanPro_Bold.ttf + # weight: 700 + # + fonts: + - family: Comfortaa + fonts: + - asset: assets/fonts/Comfortaa-Regular.ttf + + # For details regarding fonts from package dependencies, + # see https://flutter.dev/custom-fonts/#from-packages