These two files are added in any native app and you're going to get React Native code in a native app straight away. Now, one extra challenge that we faced in that case, which is React Native code in a native app, so we had the situation where we wanted to pass a whole view from native app to the React Native modules and we've done that using the require native component components. When you add this small tag above any component when you're describing it in the code, this means that this view could be passed between native and React Native code. As you can see, it's very straightforward, definitely more time saved, bugs just fixed in one place and the efficiency really increased. I hope you all agree with me, thank you.
And handing back to Jamie for questions and coffee break parts. I'll ask it instead. So the question from Peter is, which repository layout is being used, Mono or Poly or other? And if Mono, which tooling is being used? I don't know if someone could answer that for Peter. So I can take a stab at that. So at the moment we don't use a Mono repo setup. It is definitely something that we're currently exploring in terms of how we can structure a project to be able to utilize a Mono repo, how we can detect where changes are being made in that Mono repo and trigger a build pipeline based on that. So at the moment we have a repo per sort of component, effectively, per feature. So in the slides that Noha covered, there'll be a repo for login, another one for onboarding, billing. So for each specific feature, we have a repo and we have a build pipeline associated with that. So that's kinda current setup that we have in terms of tooling, the main tooling that we use in terms of our CI workflows and pipelines is Jenkins. We have a lot of automation within the workflow, we have a lot of scripts that are running to facilitate anything that would be done manually, keeping code up-to-date, pushing code between different branches. So we have quite an advanced setup in terms of CI and structure, but we are currently looking into the Mono repo concepts to see how they would apply to us and how we would manage them across the organization.
And there was just one other question in the chat that I think we could probably cover here from David. And David asks, if targeting multiple SDKs or builds of devices across markets, how do you align with the shared codes that the API is available on a per device basis work? He says, this is obviously a bigger issue on the Android side, more than iOS. I don't know if you, Neha or Emir, would comment on that. Neha, did you want to take that one, or we have to think about that one offline and come back with a typed answer, I believe. Yeah, yeah, let me get back to you David on chat. Cool. Okay. I'll take a note of the question and I'll send it over to Neha so that we can deal with it afterwards. And just one through from Christian. So it says, how do you handle versioning of your code part shared between different markets and API contract changes in them? With a bonus question, so you share TS type somehow? So basically for each component, there is a version that when we add extra features, then we increment the version, whether it's a batch version, a minor version or a major version. And the market has the ability and has the option to whenever they want to upgrade to this latest version of the components to upgrade to. So if they want to stay, for example, if they already integrated version 1.2.3, then they have the option to remain on this version as much as they want. If, for example, I released version 1.4.0 and it has an extra cool feature that they would love to integrate, then they just upgrade to this feature. So basically it's a matter of when the market or when the using app wants to upgrade to this specific version. Do you share TypeScript types somehow? The code is open source, basically, so if they want to check anything in the code, they can. How do we share the output? As I've mentioned in the presentation, the code is written in JavaScript, then there's a layer of TypeScript over it, then the documentation is generated from this TypeScript definition files. So at the end of the day, the documentation, definitely there's two types of documentation that we have. One which shows that for a high level one, which says, for example, when you want to integrate this and this and that, then this is the type of pops that you'd like to send. And then we ask the market to check the parts that's needed for this component to work. We direct them to the documentation website that I've just showed you a sample of. So they are always up to date with the latest TypeScript code that we've written. So, once they've checked this documentation, this is how we share with them the TypeScript text. I hope this answers your question, Christian. If not, please let me know in the chat. Thank you. And then just one other question through on the Q and A. And the question is, forgive me for asking, but why are we using a whole repo per feature rather than feature flags, for example? I can take this one. So, the reason that we have it set up that way is to allow us to release each of these individual features separately. So, using feature flags may take away a little bit from that flexibility or that capability. Most of our features are independent of each other. So, we try and have an abstract set up to allow clarity in terms of which features we are releasing individually. So, we have scheduled releases on a monthly basis, for instance, but we are able to release any component in isolation or any feature in isolation. So, that's why we've set it up this way. As mentioned, when we look at the whole mono-repo approach, obviously this may change, but that's something that we're currently looking into. Cool, thank you, and thanks Abdelrahman for the question. Just a couple more that we can squeeze through, if that's all right, before the coffee break. So, Pizza has another question, which is, is there any API to consume a contract solution being used? Of course, if not, GraphQL, if not what? Do you want me to pick this one Amir? Yeah, sure. Yeah, so in terms of interface to markets, so yes, there's standardization of APIs on the back end, both in terms of the API contract and the data model being promoted across Vodafone markets, conforming to the TMF standard, so the Telco Management Forum Open Standard for APIs. So yes, we are pushing standardization of APIs from a market billing CRM, customer data exposure perspective. Equally, within the app that we have, we do support a certain level of abstraction in the API so we can cater for API variants per market as well. Amir, Noha, anything else to add? No, I think that covered all the points in terms of we try and promote standardization across the markets, obviously every market has a different backend and a different setup. So there is some challenges getting to aligned API contracts, but from a front end perspective, we try and abstract the API contract away from the front end implementation. So there's a layer in between to map the API response to what the front end needs, which allows, obviously, different backends to be plugged in and a level of abstraction, which is really key in this sort of model. Yeah, exactly, like you've mentioned, Emile. So basically, our components are built in a way that they're expecting some data. From where does this data come from? They really don't care and they don't worry about where the data comes from. So whether it's an API, it's a local database, it's a safe JSON file, anywhere, the components are just expecting some data and they want to come in a certain way and that's it. And that's Emile mentioned, we're integrating some of our components with some backend. But again, because each market has a different backend, then we also have the layer of mapping, which is totally override a little by any of the using mobile apps. So if you want to use our mapping layer, which maps the response of the API to our components, then you can. If you have a different backend, then you could override this mapping layer and write your own mapping layer.
Comments