root / src / app / settings / settings.component.ts @ fc64f1a2
Historique | Voir | Annoter | Télécharger (8,36 ko)
1 | f3d5fa3b | Eric Seigne | import { Component, OnInit } from "@angular/core"; |
---|---|---|---|
2 | import { RadSideDrawer } from "nativescript-ui-sidedrawer"; |
||
3 | import { TextField } from "tns-core-modules/ui/text-field"; |
||
4 | import { EventData } from "tns-core-modules/data/observable"; |
||
5 | import { getViewById } from "tns-core-modules/ui/core/view"; |
||
6 | import { View } from "tns-core-modules/ui/core/view"; |
||
7 | import { Page } from "tns-core-modules/ui/page"; |
||
8 | import { ActivatedRoute } from "@angular/router"; |
||
9 | import { RouterExtensions } from "nativescript-angular/router"; |
||
10 | import { getFile, getImage, getJSON, request, HttpResponse } from "tns-core-modules/http"; |
||
11 | import { getString, setString, hasKey, remove, clear } from "tns-core-modules/application-settings"; |
||
12 | import { ListPicker } from "tns-core-modules/ui/list-picker"; |
||
13 | import { getFrameById } from "tns-core-modules/ui/frame"; |
||
14 | import { ObservableArray, ChangedData } from "tns-core-modules/data/observable-array"; |
||
15 | import { CheckBox } from '@nstudio/nativescript-checkbox'; |
||
16 | import { topmost } from 'tns-core-modules/ui/frame'; |
||
17 | |||
18 | import * as dialogs from "tns-core-modules/ui/dialogs"; |
||
19 | import * as app from "tns-core-modules/application"; |
||
20 | import { observable } from "rxjs"; |
||
21 | import { RadioOption } from "./radio-option"; |
||
22 | |||
23 | @Component({ |
||
24 | selector: "Settings", |
||
25 | templateUrl: "./settings.component.html" |
||
26 | }) |
||
27 | export class SettingsComponent implements OnInit { |
||
28 | public pseudo: string; |
||
29 | public email: string; |
||
30 | public serverJSON: JSON; |
||
31 | public serverName: string; |
||
32 | public serverURI: string; |
||
33 | public serverLabel: string; |
||
34 | radioOptions?: Array<RadioOption>; |
||
35 | |||
36 | constructor(private routerExtensions: RouterExtensions, private activeRoute: ActivatedRoute) { |
||
37 | // Use the component constructor to inject providers. |
||
38 | } |
||
39 | |||
40 | ngOnInit(): void { |
||
41 | this.radioOptions = []; |
||
42 | |||
43 | let serversLabelTMP = Array(); |
||
44 | // Init your component properties here. |
||
45 | this.pseudo = getString("pseudo", ""); |
||
46 | this.email = getString("email", ""); |
||
47 | this.serverName = getString("serverName", ""); |
||
48 | this.serverURI = getString("serverURI", ""); |
||
49 | |||
50 | //On recupere les infos serveurs et en particulier la liste des serveurs disponibles |
||
51 | b16c83be | Eric Seigne | try { |
52 | this.serverJSON = JSON.parse(getString("serverJSON")); |
||
53 | let i = 0; |
||
54 | this.serverJSON['servers'].forEach(element => { |
||
55 | console.log(" JSON element : ", element.name); |
||
56 | let option = new RadioOption(element.label, element.uri); |
||
57 | this.radioOptions.push(option); |
||
58 | if (i == 0) { |
||
59 | console.log(" Premier element on le checked : ", element.label); |
||
60 | this.serverLabel = element.label; |
||
61 | this.serverName = element.label; |
||
62 | this.serverURI = element.uri; |
||
63 | option.selected = true; |
||
64 | } |
||
65 | i++; |
||
66 | }); |
||
67 | } catch (e) { |
||
68 | console.log(" JSON empty, ask server"); |
||
69 | fc64f1a2 | Eric Seigne | getJSON("https://clicalbum.abuledu.net/api.php").then((r: any) => { |
70 | 2c8d373c | Eric Seigne | console.log("getJSON : ", r); |
71 | this.serverJSON = r; |
||
72 | let i = 0; |
||
73 | r.servers.forEach(element => { |
||
74 | console.log(" json element : ", element.name); |
||
75 | let option = new RadioOption(element.label, element.uri); |
||
76 | this.radioOptions.push(option); |
||
77 | if (i == 0) { |
||
78 | console.log(" premier element on le checked : ", element.label); |
||
79 | this.serverLabel = element.label; |
||
80 | this.serverName = element.label; |
||
81 | this.serverURI = element.uri; |
||
82 | option.selected = true; |
||
83 | } |
||
84 | i++; |
||
85 | }); |
||
86 | }, (e) => { |
||
87 | console.log("getJSON Error", e); |
||
88 | }); |
||
89 | } |
||
90 | |||
91 | f3d5fa3b | Eric Seigne | } |
92 | |||
93 | changeCheckedRadio(radioOption: RadioOption): void { |
||
94 | radioOption.selected = !radioOption.selected; |
||
95 | |||
96 | if (!radioOption.selected) { |
||
97 | return; |
||
98 | } |
||
99 | |||
100 | this.serverLabel = radioOption.label; |
||
101 | this.serverName = radioOption.label; |
||
102 | this.serverURI = radioOption.uri; |
||
103 | |||
104 | // uncheck all other options |
||
105 | this.radioOptions.forEach(option => { |
||
106 | //On est sur un qu'il faut décocher |
||
107 | if (option.label !== radioOption.label) { |
||
108 | option.selected = false; |
||
109 | } |
||
110 | //On est sur le choix coché |
||
111 | }); |
||
112 | } |
||
113 | |||
114 | |||
115 | onDrawerButtonTap(): void { |
||
116 | const sideDrawer = <RadSideDrawer>app.getRootView(); |
||
117 | sideDrawer.showDrawer(); |
||
118 | } |
||
119 | |||
120 | onFocus(args: EventData): void { |
||
121 | console.log("on focus: "); |
||
122 | } |
||
123 | |||
124 | onBlur(args: EventData): void { |
||
125 | const tf = <TextField>args.object; |
||
126 | this.pseudo = tf.text.toLowerCase().replace(/[^a-z0-9]/g, ""); |
||
127 | tf.text = this.pseudo; |
||
128 | } |
||
129 | |||
130 | onReturnPress(args: EventData): void { |
||
131 | console.log("on returnpress"); |
||
132 | } |
||
133 | |||
134 | onTextChange(args: EventData): void { |
||
135 | console.log("on textChange "); |
||
136 | } |
||
137 | |||
138 | onSelectedIndexChanged(args: EventData) { |
||
139 | const picker = <ListPicker>args.object; |
||
140 | console.log('index: ${picker.selectedIndex}; item" ${this.years[picker.selectedIndex]}'); |
||
141 | } |
||
142 | |||
143 | onSaveTap(args: EventData): void { |
||
144 | // alert("on sauvegarde ..."); |
||
145 | let button = <View>args.object; |
||
146 | let parent = button.parent; |
||
147 | if (parent) { |
||
148 | let p = <TextField>getViewById(parent, "pseudo"); |
||
149 | let e = <TextField>getViewById(parent, "email"); |
||
150 | |||
151 | 62ed0250 | Eric Seigne | this.pseudo = p.text.toLowerCase().replace(/[^a-z0-9]/g, "") |
152 | f3d5fa3b | Eric Seigne | this.email = e.text; |
153 | |||
154 | // console.log("on a un parent, le pseudo : " + this.pseudo); |
||
155 | // console.log("le mail : " + this.email); |
||
156 | |||
157 | if (this.pseudo == "" || this.email == "") { |
||
158 | dialogs.alert({ |
||
159 | title: "Pseudo ou email vide !", |
||
160 | message: "Veuillez saisir un pseudo et une adresse mail...", |
||
161 | okButtonText: "Ok" |
||
162 | }); |
||
163 | } |
||
164 | else { |
||
165 | //il faudrait demander au serveur si ce pseudo n'est pas déjà utilisé ... |
||
166 | request({ |
||
167 | url: "https://" + this.serverURI + "/api.php", |
||
168 | method: "POST", |
||
169 | headers: { "Content-Type": "application/json" }, |
||
170 | content: JSON.stringify({ |
||
171 | command: "createUser", |
||
172 | pseudo: this.pseudo, |
||
173 | email: this.email |
||
174 | }) |
||
175 | }).then((response) => { |
||
176 | const result = response.content.toJSON(); |
||
177 | console.log("Valeur de loginOK dans le retour request : ", result['loginOK']); |
||
178 | |||
179 | if (result['loginOK'] == true) { |
||
180 | setString("pseudo", this.pseudo); |
||
181 | setString("email", this.email); |
||
182 | setString("serverURI", this.serverURI); |
||
183 | setString("serverName", this.serverName); |
||
184 | dialogs.alert({ |
||
185 | title: "Pseudo enregistré !", |
||
186 | message: "Votre pseudo est maintenant associé à votre adresse email vous pouvez utiliser l'application.", |
||
187 | okButtonText: "Ok" |
||
188 | }).then(() => { |
||
189 | this.routerExtensions.navigate(["/home"], { relativeTo: this.activeRoute }); |
||
190 | }); |
||
191 | } |
||
192 | else { |
||
193 | console.log("Pseudo déjà utilisé"); |
||
194 | dialogs.alert({ |
||
195 | title: "Pseudo déjà utilisé !", |
||
196 | message: "Malheureusement ce pseudo est déjà utilisé par quelqu'un d'autre. Veuillez changer de pseudo et tenter à nouveau votre chance :-)", |
||
197 | okButtonText: "Ok" |
||
198 | }); |
||
199 | } |
||
200 | }, (e) => { |
||
201 | console.log("request Error :", e); |
||
202 | dialogs.alert({ |
||
203 | title: "Erreur de vérification !", |
||
204 | message: "Une erreur de communication avec le serveur nous empêche de vérifier si ce pseudo est déjà utilisé ... ré-essayez plus tard.", |
||
205 | okButtonText: "Ok" |
||
206 | }); |
||
207 | }); |
||
208 | } |
||
209 | } |
||
210 | } |
||
211 | } |