@nativescript-community/ui-dialogs 0.0.0-stage → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,581 @@
1
+ import { getColorStateList } from '@nativescript-community/ui-core/android/utils';
2
+ import { TextField } from '@nativescript-community/ui-textfield';
3
+ import { Application, Builder, CSSUtils, DialogStrings, StackLayout, Utils, View, capitalizationType, fromObject, inputType } from '@nativescript/core';
4
+ import { isDialogOptions, showingDialogs } from './index-common';
5
+ export { capitalizationType, inputType };
6
+ function isString(value) {
7
+ return typeof value === 'string';
8
+ }
9
+ let DialogInterface;
10
+ let MaterialAlertDialogBuilder;
11
+ function createAlertDialogBuilder(options) {
12
+ const activity = Application.android.foregroundActivity || Application.android.startActivity;
13
+ if (!MaterialAlertDialogBuilder) {
14
+ MaterialAlertDialogBuilder = com.google.android.material.dialog.MaterialAlertDialogBuilder;
15
+ }
16
+ const builder = new MaterialAlertDialogBuilder(activity);
17
+ builder.setTitle(options && isString(options.title) ? options.title : null);
18
+ builder.setMessage(options && isString(options.message) ? options.message : null);
19
+ if (options.titleIcon) {
20
+ builder.setIcon(new android.graphics.drawable.BitmapDrawable(options.titleIcon.android));
21
+ }
22
+ if (options && options.cancelable === false) {
23
+ builder.setCancelable(false);
24
+ if (!DialogInterface) {
25
+ DialogInterface = android.content.DialogInterface;
26
+ }
27
+ builder.setOnKeyListener(new DialogInterface.OnKeyListener({
28
+ onKey(dialog, keyCode, event) {
29
+ // Prevent dialog close on back press button
30
+ return keyCode === android.view.KeyEvent.KEYCODE_BACK;
31
+ }
32
+ }));
33
+ }
34
+ if (options.customTitleView) {
35
+ builder.setCustomTitle(options.customTitleView.nativeViewProtected);
36
+ }
37
+ if (options.view) {
38
+ const view = options.view instanceof View
39
+ ? options.view
40
+ : Builder.createViewFromEntry({
41
+ moduleName: options.view
42
+ });
43
+ if (view.parent) {
44
+ view.parent._removeView(view);
45
+ }
46
+ view.cssClasses.add(CSSUtils.MODAL_ROOT_VIEW_CSS_CLASS);
47
+ const modalRootViewCssClasses = CSSUtils.getSystemCssClasses();
48
+ modalRootViewCssClasses.forEach((c) => view.cssClasses.add(c));
49
+ builder._currentModalCustomView = view;
50
+ view._setupAsRootView(activity);
51
+ view.parent = Application.getRootView();
52
+ view._isAddedToNativeVisualTree = true;
53
+ view.callLoaded();
54
+ // seems necessary to add a frame or the view wont correctly size itself
55
+ const frame = new android.widget.FrameLayout(activity);
56
+ frame.addView(view.nativeViewProtected);
57
+ builder.setView(frame);
58
+ }
59
+ return builder;
60
+ }
61
+ function showDialog(dlg, options) {
62
+ if (options.titleColor) {
63
+ const textViewId = dlg.getContext().getResources().getIdentifier('android:id/alertTitle', null, null);
64
+ if (textViewId) {
65
+ const tv = dlg.findViewById(textViewId);
66
+ if (tv) {
67
+ tv.setTextColor(options.titleColor.android);
68
+ }
69
+ }
70
+ if (options.messageColor) {
71
+ const messageTextViewId = dlg.getContext().getResources().getIdentifier('android:id/message', null, null);
72
+ if (messageTextViewId) {
73
+ const messageTextView = dlg.findViewById(messageTextViewId);
74
+ if (messageTextView) {
75
+ messageTextView.setTextColor(options.messageColor.android);
76
+ }
77
+ }
78
+ }
79
+ }
80
+ // const labelColor = getLabelColor();
81
+ // if (labelColor) {
82
+ // const textViewId = dlg
83
+ // .getContext()
84
+ // .getResources()
85
+ // .getIdentifier('android:id/alertTitle', null, null);
86
+ // if (textViewId) {
87
+ // const tv = <android.widget.TextView>dlg.findViewById(textViewId);
88
+ // if (tv) {
89
+ // tv.setTextColor(labelColor.android);
90
+ // }
91
+ // }
92
+ // const messageTextViewId = dlg
93
+ // .getContext()
94
+ // .getResources()
95
+ // .getIdentifier('android:id/message', null, null);
96
+ // if (messageTextViewId) {
97
+ // const messageTextView = <android.widget.TextView>dlg.findViewById(messageTextViewId);
98
+ // if (messageTextView) {
99
+ // messageTextView.setTextColor(labelColor.android);
100
+ // }
101
+ // }
102
+ // }
103
+ // let { color, backgroundColor } = getButtonColors();
104
+ if (options.buttonInkColor || options.buttonTitleColor) {
105
+ dlg.create();
106
+ const buttons = [];
107
+ for (let i = -1; i > -4; i--) {
108
+ buttons.push(dlg.getButton(i));
109
+ }
110
+ const nInkColor = options.buttonInkColor && getColorStateList(options.buttonInkColor.android);
111
+ const nTitleColor = options.buttonTitleColor && getColorStateList(options.buttonTitleColor.android);
112
+ buttons.forEach((button) => {
113
+ if (button) {
114
+ if (nInkColor) {
115
+ button.setRippleColor(nInkColor);
116
+ }
117
+ if (nTitleColor) {
118
+ button.setTextColor(nTitleColor);
119
+ button.setIconTint(nTitleColor);
120
+ }
121
+ }
122
+ });
123
+ }
124
+ showingDialogs.push(dlg);
125
+ dlg.show();
126
+ return dlg;
127
+ }
128
+ function prepareAndCreateAlertDialog(builder, options, callback, validationArgs) {
129
+ // onDismiss will always be called. Prevent calling callback multiple times
130
+ let onDoneCalled = false;
131
+ const onDone = function (result, dialog, toBeCalledBeforeCallback) {
132
+ if (options && options.shouldResolveOnAction && !options.shouldResolveOnAction(validationArgs ? validationArgs(result) : result)) {
133
+ return;
134
+ }
135
+ if (onDoneCalled) {
136
+ toBeCalledBeforeCallback?.();
137
+ return;
138
+ }
139
+ //ensure we hide any keyboard
140
+ onDoneCalled = true;
141
+ if (options.view instanceof View) {
142
+ Utils.android.dismissSoftInput(options.view.nativeView);
143
+ }
144
+ else {
145
+ const activity = (Application.android.foregroundActivity || Application.android.startActivity);
146
+ const context = Utils.android.getApplicationContext();
147
+ const view = activity != null ? activity.getCurrentFocus() : null;
148
+ if (view) {
149
+ const imm = context.getSystemService(android.content.Context.INPUT_METHOD_SERVICE);
150
+ imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
151
+ }
152
+ }
153
+ if (dialog) {
154
+ dialog.cancel();
155
+ }
156
+ toBeCalledBeforeCallback?.();
157
+ callback && callback(result);
158
+ };
159
+ if (!DialogInterface) {
160
+ DialogInterface = android.content.DialogInterface;
161
+ }
162
+ builder.setOnDismissListener(new DialogInterface.OnDismissListener({
163
+ onDismiss(dialog) {
164
+ const index = showingDialogs.indexOf(dialog);
165
+ if (index !== -1) {
166
+ showingDialogs.splice(index, 1);
167
+ }
168
+ // ensure callback is called after destroying the custom view
169
+ onDone(false, undefined, () => {
170
+ if (builder._currentModalCustomView) {
171
+ const view = builder._currentModalCustomView;
172
+ view.callUnloaded();
173
+ view._tearDownUI(true);
174
+ view.parent = null;
175
+ view._isAddedToNativeVisualTree = false;
176
+ builder._currentModalCustomView = null;
177
+ }
178
+ });
179
+ }
180
+ }));
181
+ const dlg = builder.create();
182
+ dlg['onDone'] = onDone;
183
+ if (!options) {
184
+ return dlg;
185
+ }
186
+ if (builder._currentModalCustomView) {
187
+ const view = builder._currentModalCustomView;
188
+ const context = options.context || {};
189
+ context.closeCallback = function (originalArgs) {
190
+ onDone(originalArgs, dlg);
191
+ // if (callback) {
192
+ // callback.apply(this, originalArgs);
193
+ // }
194
+ };
195
+ view.bindingContext = fromObject(context);
196
+ }
197
+ if (options.dismissOnBackgroundTap !== undefined) {
198
+ dlg.setCanceledOnTouchOutside(options.dismissOnBackgroundTap);
199
+ }
200
+ if (options.okButtonText) {
201
+ if (!DialogInterface) {
202
+ DialogInterface = android.content.DialogInterface;
203
+ }
204
+ dlg.setButton(DialogInterface.BUTTON_POSITIVE, options.okButtonText, null, new android.content.DialogInterface.OnClickListener({
205
+ onClick(dialog, id) {
206
+ onDone(true, dialog);
207
+ }
208
+ }));
209
+ // alert.setPositiveButton(
210
+ // );
211
+ }
212
+ if (options.cancelButtonText) {
213
+ if (!DialogInterface) {
214
+ DialogInterface = android.content.DialogInterface;
215
+ }
216
+ dlg.setButton(DialogInterface.BUTTON_NEGATIVE, options.cancelButtonText, null, new DialogInterface.OnClickListener({
217
+ onClick(dialog, id) {
218
+ onDone(false, dialog);
219
+ }
220
+ }));
221
+ // alert.setNegativeButton(
222
+ // options.cancelButtonText,
223
+ // new DialogInterface.OnClickListener({
224
+ // onClick: function(dialog: android.content.DialogInterface, id: number) {
225
+ // onDone(false, dialog);
226
+ // }
227
+ // })
228
+ // );
229
+ }
230
+ if (options.neutralButtonText) {
231
+ if (!DialogInterface) {
232
+ DialogInterface = android.content.DialogInterface;
233
+ }
234
+ dlg.setButton(DialogInterface.BUTTON_NEUTRAL, options.neutralButtonText, null, new DialogInterface.OnClickListener({
235
+ onClick(dialog, id) {
236
+ onDone(undefined, dialog);
237
+ }
238
+ }));
239
+ // alert.setNeutralButton(
240
+ // options.neutralButtonText,
241
+ // new DialogInterface.OnClickListener({
242
+ // onClick: function(dialog: android.content.DialogInterface, id: number) {
243
+ // onDone(undefined, dialog);
244
+ // }
245
+ // })
246
+ // );
247
+ }
248
+ return dlg;
249
+ }
250
+ export function alert(arg) {
251
+ return new Promise((resolve, reject) => {
252
+ try {
253
+ const defaultOptions = {
254
+ okButtonText: DialogStrings.OK
255
+ };
256
+ const options = !isDialogOptions(arg) ? Object.assign(defaultOptions, { message: arg + '' }) : Object.assign(defaultOptions, arg);
257
+ const alert = createAlertDialogBuilder(options);
258
+ const dlg = prepareAndCreateAlertDialog(alert, options, resolve);
259
+ showDialog(dlg, options);
260
+ }
261
+ catch (ex) {
262
+ console.error(ex);
263
+ reject(ex);
264
+ }
265
+ });
266
+ }
267
+ export class AlertDialog {
268
+ constructor(options) {
269
+ this.options = options;
270
+ this.onCloseListeners = [];
271
+ }
272
+ onClosed(...args) {
273
+ this.onCloseListeners.forEach((l) => l(...args));
274
+ this.onCloseListeners = [];
275
+ }
276
+ show(onClosed) {
277
+ if (!this.dialog) {
278
+ const alert = createAlertDialogBuilder(this.options);
279
+ this.dialog = alert.create();
280
+ this.dialog = prepareAndCreateAlertDialog(alert, this.options, (...args) => {
281
+ this.onClosed(...args);
282
+ onClosed?.(...args);
283
+ });
284
+ showDialog(this.dialog, this.options);
285
+ }
286
+ }
287
+ async hide(result) {
288
+ if (this.dialog) {
289
+ return new Promise((resolve) => {
290
+ this.onCloseListeners.push(resolve);
291
+ if (this.dialog['onDone']) {
292
+ this.dialog['onDone'](result, this.dialog);
293
+ }
294
+ else {
295
+ this.dialog.cancel();
296
+ }
297
+ this.dialog = null;
298
+ });
299
+ }
300
+ return null;
301
+ }
302
+ }
303
+ export function confirm(arg) {
304
+ return new Promise((resolve, reject) => {
305
+ try {
306
+ const defaultOptions = {
307
+ okButtonText: DialogStrings.OK,
308
+ cancelButtonText: DialogStrings.CANCEL
309
+ };
310
+ const options = Object.assign(defaultOptions, !isDialogOptions(arg)
311
+ ? {
312
+ message: arg + ''
313
+ }
314
+ : arg);
315
+ const alert = createAlertDialogBuilder(options);
316
+ const dlg = prepareAndCreateAlertDialog(alert, options, resolve);
317
+ showDialog(dlg, options);
318
+ }
319
+ catch (ex) {
320
+ console.error(ex);
321
+ reject(ex);
322
+ }
323
+ });
324
+ }
325
+ export function prompt(...args) {
326
+ let options;
327
+ const defaultOptions = {
328
+ okButtonText: DialogStrings.OK,
329
+ cancelButtonText: DialogStrings.CANCEL,
330
+ inputType: inputType.text
331
+ };
332
+ if (args.length === 1) {
333
+ if (isString(args[0])) {
334
+ options = defaultOptions;
335
+ options.message = args[0];
336
+ }
337
+ else {
338
+ options = Object.assign(defaultOptions, args[0]);
339
+ }
340
+ }
341
+ else if (args.length === 2) {
342
+ if (isString(args[0]) && isString(args[1])) {
343
+ options = defaultOptions;
344
+ options.message = args[0];
345
+ options.defaultText = args[1];
346
+ }
347
+ }
348
+ return new Promise((resolve, reject) => {
349
+ try {
350
+ const stackLayout = options.stackViewHolder ?? new StackLayout();
351
+ stackLayout.padding = 4;
352
+ if (options.messageView instanceof View) {
353
+ stackLayout.addChild(options.messageView);
354
+ }
355
+ const textField = new TextField();
356
+ textField.hint = options.hintText;
357
+ if (options) {
358
+ if (options.textFieldProperties) {
359
+ Object.assign(textField, options.textFieldProperties);
360
+ }
361
+ if (options.defaultText) {
362
+ textField.text = options.defaultText;
363
+ }
364
+ if (options.defaultText) {
365
+ textField.hint = options.hintText;
366
+ }
367
+ if (options.helperText) {
368
+ textField.helper = options.helperText;
369
+ }
370
+ if (options.inputType === inputType.password) {
371
+ textField.secure = true;
372
+ }
373
+ else if (options.inputType === inputType.email) {
374
+ textField.keyboardType = 'email';
375
+ }
376
+ else if (options.inputType === inputType.number) {
377
+ textField.keyboardType = 'number';
378
+ }
379
+ else if (options.inputType === inputType.phone) {
380
+ textField.keyboardType = 'phone';
381
+ }
382
+ switch (options.capitalizationType) {
383
+ case capitalizationType.all: {
384
+ textField.autocapitalizationType = 'allcharacters';
385
+ break;
386
+ }
387
+ case capitalizationType.sentences: {
388
+ textField.autocapitalizationType = 'sentences';
389
+ break;
390
+ }
391
+ case capitalizationType.words: {
392
+ textField.autocapitalizationType = 'words';
393
+ break;
394
+ }
395
+ }
396
+ }
397
+ stackLayout.addChild(textField);
398
+ if (options.view instanceof View) {
399
+ stackLayout.addChild(options.view);
400
+ }
401
+ options.view = stackLayout;
402
+ const alert = createAlertDialogBuilder(options);
403
+ const dlg = prepareAndCreateAlertDialog(alert, options, function (r) {
404
+ resolve({ result: r, text: textField.text });
405
+ }, (r) => ({ result: r, text: textField.text }));
406
+ showDialog(dlg, options);
407
+ if (options.autoFocus) {
408
+ // seems not to work if called too soon so we call it again
409
+ // once the view is focused and ready
410
+ textField.once('focus', () => {
411
+ setTimeout(() => {
412
+ textField.requestFocus();
413
+ }, 100);
414
+ });
415
+ textField.requestFocus();
416
+ }
417
+ }
418
+ catch (ex) {
419
+ console.error(ex);
420
+ reject(ex);
421
+ }
422
+ });
423
+ }
424
+ export function login(...args) {
425
+ let options;
426
+ const defaultOptions = {
427
+ okButtonText: DialogStrings.OK,
428
+ cancelButtonText: DialogStrings.CANCEL
429
+ };
430
+ if (args.length === 1) {
431
+ if (isString(args[0])) {
432
+ options = defaultOptions;
433
+ options.message = args[0];
434
+ }
435
+ else {
436
+ options = Object.assign(defaultOptions, args[0]);
437
+ }
438
+ }
439
+ else if (args.length === 2) {
440
+ if (isString(args[0]) && isString(args[1])) {
441
+ options = defaultOptions;
442
+ options.message = args[0];
443
+ options.userName = args[1];
444
+ }
445
+ }
446
+ else if (args.length === 3) {
447
+ if (isString(args[0]) && isString(args[1]) && isString(args[2])) {
448
+ options = defaultOptions;
449
+ options.message = args[0];
450
+ options.userName = args[1];
451
+ options.password = args[2];
452
+ }
453
+ }
454
+ return new Promise((resolve, reject) => {
455
+ try {
456
+ const stackLayout = options.stackViewHolder ?? new StackLayout();
457
+ stackLayout.padding = 4;
458
+ if (options.messageView instanceof View) {
459
+ stackLayout.addChild(options.messageView);
460
+ }
461
+ const userNameTextField = new TextField();
462
+ const passwordTextField = new TextField();
463
+ userNameTextField.hint = options.userNameHint || 'Username';
464
+ userNameTextField.text = options.userName;
465
+ passwordTextField.hint = options.passwordHint || 'Password';
466
+ passwordTextField.text = options.password;
467
+ passwordTextField.secure = true;
468
+ if (options.usernameTextFieldProperties) {
469
+ Object.assign(userNameTextField, options.usernameTextFieldProperties);
470
+ }
471
+ if (options.passwordTextFieldProperties) {
472
+ Object.assign(passwordTextField, options.passwordTextFieldProperties);
473
+ }
474
+ stackLayout.addChild(userNameTextField);
475
+ stackLayout.addChild(passwordTextField);
476
+ if (options.view instanceof View) {
477
+ stackLayout.addChild(options.view);
478
+ }
479
+ options.view = stackLayout;
480
+ const alert = createAlertDialogBuilder(options);
481
+ if (options.beforeShow) {
482
+ options.beforeShow(options, userNameTextField, passwordTextField);
483
+ }
484
+ const dlg = prepareAndCreateAlertDialog(alert, options, function (r) {
485
+ resolve({
486
+ result: r,
487
+ userName: userNameTextField.text,
488
+ password: passwordTextField.text
489
+ });
490
+ }, (r) => ({ result: r, userName: userNameTextField.text, password: passwordTextField.text }));
491
+ showDialog(dlg, options);
492
+ if (options.autoFocus) {
493
+ // seems not to work if called too soon so we call it again
494
+ // once the view is focused and ready
495
+ userNameTextField.once('focus', () => {
496
+ setTimeout(() => {
497
+ userNameTextField.requestFocus();
498
+ }, 100);
499
+ });
500
+ userNameTextField.requestFocus();
501
+ }
502
+ }
503
+ catch (ex) {
504
+ console.error(ex);
505
+ reject(ex);
506
+ }
507
+ });
508
+ }
509
+ export function action(...args) {
510
+ let options;
511
+ const defaultOptions = { title: null, cancelButtonText: DialogStrings.CANCEL };
512
+ if (args.length === 1) {
513
+ if (isString(args[0])) {
514
+ options = defaultOptions;
515
+ options.message = args[0];
516
+ }
517
+ else {
518
+ options = Object.assign(defaultOptions, args[0]);
519
+ }
520
+ }
521
+ else if (args.length === 2) {
522
+ if (isString(args[0]) && isString(args[1])) {
523
+ options = defaultOptions;
524
+ options.message = args[0];
525
+ options.cancelButtonText = args[1];
526
+ }
527
+ }
528
+ else if (args.length === 3) {
529
+ if (isString(args[0]) && isString(args[1]) && typeof args[2] !== 'undefined') {
530
+ options = defaultOptions;
531
+ options.message = args[0];
532
+ options.cancelButtonText = args[1];
533
+ options.actions = args[2];
534
+ }
535
+ }
536
+ return new Promise((resolve, reject) => {
537
+ try {
538
+ const activity = Application.android.foregroundActivity || Application.android.startActivity;
539
+ if (!MaterialAlertDialogBuilder) {
540
+ MaterialAlertDialogBuilder = com.google.android.material.dialog.MaterialAlertDialogBuilder;
541
+ }
542
+ const alert = new MaterialAlertDialogBuilder(activity);
543
+ const message = options && isString(options.message) ? options.message : '';
544
+ const title = options && isString(options.title) ? options.title : '';
545
+ if (options && options.cancelable === false) {
546
+ alert.setCancelable(false);
547
+ }
548
+ if (title) {
549
+ alert.setTitle(title);
550
+ if (!options.actions) {
551
+ alert.setMessage(message);
552
+ }
553
+ }
554
+ else {
555
+ alert.setTitle(message);
556
+ }
557
+ if (options.actions) {
558
+ if (!DialogInterface) {
559
+ DialogInterface = android.content.DialogInterface;
560
+ }
561
+ alert.setItems(options.actions, new DialogInterface.OnClickListener({
562
+ onClick(dialog, which) {
563
+ resolve(options.actions[which]);
564
+ }
565
+ }));
566
+ }
567
+ const dlg = prepareAndCreateAlertDialog(alert, options, function (r) {
568
+ if (r === false || r === undefined) {
569
+ resolve(options.cancelButtonText);
570
+ }
571
+ resolve(r);
572
+ });
573
+ showDialog(dlg, options);
574
+ }
575
+ catch (ex) {
576
+ console.error(ex);
577
+ reject(ex);
578
+ }
579
+ });
580
+ }
581
+ //# sourceMappingURL=index.android.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.android.js","sourceRoot":"","sources":["../../src/ui-dialogs/index.android.ts"],"names":[],"mappings":"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"}