123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109 |
- // @flow
-
- import {Linking} from 'react-native';
-
- export default class URLHandler {
-
- static SCHEME = "campus-insat://";
-
- static CLUB_INFO_URL_PATH = "club";
- static EVENT_INFO_URL_PATH = "event";
-
- static CLUB_INFO_ROUTE = "club-information";
- static EVENT_INFO_ROUTE = "planning-information";
-
- onInitialURLParsed: Function;
- onDetectURL: Function;
-
- constructor(onInitialURLParsed: Function, onDetectURL: Function) {
- this.onInitialURLParsed = onInitialURLParsed;
- this.onDetectURL = onDetectURL;
- }
-
- listen() {
- Linking.addEventListener('url', this.onUrl);
- Linking.getInitialURL().then(this.onInitialUrl);
- }
-
- onUrl = ({url}: { url: string }) => {
- if (url != null) {
- let data = URLHandler.getUrlData(URLHandler.parseUrl(url));
- if (data !== null)
- this.onDetectURL(data);
- }
- };
-
- onInitialUrl = (url: ?string) => {
- if (url != null) {
- let data = URLHandler.getUrlData(URLHandler.parseUrl(url));
- if (data !== null)
- this.onInitialURLParsed(data);
- }
- };
-
- static parseUrl(url: string) {
- let params = {};
- let path = "";
- let temp = url.replace(URLHandler.SCHEME, "");
- if (temp != null) {
- let array = temp.split("?");
- if (array != null && array.length > 0) {
- path = array[0];
- }
- if (array != null && array.length > 1) {
- let tempParams = array[1].split("&");
- for (let i = 0; i < tempParams.length; i++) {
- let paramsArray = tempParams[i].split("=");
- if (paramsArray.length > 1) {
- params[paramsArray[0]] = paramsArray[1];
- }
- }
- }
- }
- return {path: path, queryParams: params};
- }
-
- static getUrlData({path, queryParams}: Object) {
- let data = null;
- if (path !== null) {
- if (URLHandler.isClubInformationLink(path))
- data = URLHandler.generateClubInformationData(queryParams);
- else if (URLHandler.isPlanningInformationLink(path))
- data = URLHandler.generatePlanningInformationData(queryParams);
- }
- return data;
- }
-
- static isUrlValid(url: string) {
- return this.getUrlData(URLHandler.parseUrl(url)) !== null;
- }
-
- static isClubInformationLink(path: string) {
- return path === URLHandler.CLUB_INFO_URL_PATH;
- }
-
- static isPlanningInformationLink(path: string) {
- return path === URLHandler.EVENT_INFO_URL_PATH;
- }
-
- static generateClubInformationData(params: Object): Object | null {
- if (params !== undefined && params.id !== undefined) {
- let id = parseInt(params.id);
- if (!isNaN(id)) {
- return {route: URLHandler.CLUB_INFO_ROUTE, data: {clubId: id}};
- }
- }
- return null;
- }
-
- static generatePlanningInformationData(params: Object): Object | null {
- if (params !== undefined && params.id !== undefined) {
- let id = parseInt(params.id);
- if (!isNaN(id)) {
- return {route: URLHandler.EVENT_INFO_ROUTE, data: {eventId: id}};
- }
- }
- return null;
- }
-
- }
|