@softpak/components 0.1.0-beta.2 → 0.1.0-beta.3
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.
- package/esm2022/spx-app-update/public-api.mjs +2 -0
- package/esm2022/spx-app-update/softpak-components-spx-app-update.mjs +5 -0
- package/esm2022/spx-app-update/spx-app-update.component.mjs +315 -0
- package/fesm2022/softpak-components-spx-app-update.mjs +322 -0
- package/fesm2022/softpak-components-spx-app-update.mjs.map +1 -0
- package/package.json +13 -7
- package/spx-app-update/index.d.ts +5 -0
- package/spx-app-update/public-api.d.ts +1 -0
- package/spx-app-update/spx-app-update.component.d.ts +48 -0
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export * from './spx-app-update.component';
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NvZnRwYWsvY29tcG9uZW50cy9zcHgtYXBwLXVwZGF0ZS9wdWJsaWMtYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsNEJBQTRCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL3NweC1hcHAtdXBkYXRlLmNvbXBvbmVudCc7XG4iXX0=
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generated bundle index. Do not edit.
|
|
3
|
+
*/
|
|
4
|
+
export * from './public-api';
|
|
5
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic29mdHBhay1jb21wb25lbnRzLXNweC1hcHAtdXBkYXRlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc29mdHBhay9jb21wb25lbnRzL3NweC1hcHAtdXBkYXRlL3NvZnRwYWstY29tcG9uZW50cy1zcHgtYXBwLXVwZGF0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsY0FBYyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZW5lcmF0ZWQgYnVuZGxlIGluZGV4LiBEbyBub3QgZWRpdC5cbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL3B1YmxpYy1hcGknO1xuIl19
|
|
@@ -0,0 +1,315 @@
|
|
|
1
|
+
import { NgClass } from '@angular/common';
|
|
2
|
+
import { Component, Input } from '@angular/core';
|
|
3
|
+
import { FormsModule, ReactiveFormsModule } from '@angular/forms';
|
|
4
|
+
import { IonContent, IonHeader, IonToolbar, IonTitle } from '@ionic/angular/standalone';
|
|
5
|
+
import { TranslateModule } from '@ngx-translate/core';
|
|
6
|
+
import { SpxCapitalizePipe } from '@softpak/components/spx-capitalize';
|
|
7
|
+
import { SpxInputComponent } from '@softpak/components/spx-inputs';
|
|
8
|
+
import { SpxProgressBarComponent } from '@softpak/components/spx-progress-bar';
|
|
9
|
+
import { SpxStorage, SpxStorageKeyEnum } from '@softpak/components/spx-storage';
|
|
10
|
+
import { Device } from '@capacitor/device';
|
|
11
|
+
import { getCurrentScope } from '@sentry/angular';
|
|
12
|
+
import * as i0 from "@angular/core";
|
|
13
|
+
import * as i1 from "cordova-plugin-ionic/dist/ngx";
|
|
14
|
+
import * as i2 from "@angular/router";
|
|
15
|
+
import * as i3 from "@ngx-translate/core";
|
|
16
|
+
import * as i4 from "@angular/forms";
|
|
17
|
+
const ctrlNextVersionNumber = 'ctrlNextVersionNumber';
|
|
18
|
+
const ctrlVersionNumber = 'ctrlVersionNumber';
|
|
19
|
+
const ctrlConfiguredChannel = 'ctrlConfiguredChannel';
|
|
20
|
+
const ctrlAppStoreVersion = 'ctrlAppStoreVersion';
|
|
21
|
+
export class SpxButtonComponent {
|
|
22
|
+
constructor(deploy, router, changeDetector, applicationRef, translateService, formBuilder) {
|
|
23
|
+
this.deploy = deploy;
|
|
24
|
+
this.router = router;
|
|
25
|
+
this.changeDetector = changeDetector;
|
|
26
|
+
this.applicationRef = applicationRef;
|
|
27
|
+
this.translateService = translateService;
|
|
28
|
+
this.formBuilder = formBuilder;
|
|
29
|
+
this.delayedPercentage = 0;
|
|
30
|
+
this.percentage = 0;
|
|
31
|
+
this.syncTruckInterval = null;
|
|
32
|
+
this.updateStatus = this.textCheckingForUpdates;
|
|
33
|
+
this.form = this.formBuilder.group({
|
|
34
|
+
[ctrlNextVersionNumber]: [null, []],
|
|
35
|
+
[ctrlVersionNumber]: [null, []],
|
|
36
|
+
[ctrlConfiguredChannel]: [null, []],
|
|
37
|
+
[ctrlAppStoreVersion]: [null, []],
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
get ctrlVersionNumber() { return this.form.get(ctrlVersionNumber); }
|
|
41
|
+
get ctrlNextVersionNumber() { return this.form.get(ctrlNextVersionNumber); }
|
|
42
|
+
get ctrlConfiguredChannel() { return this.form.get(ctrlConfiguredChannel); }
|
|
43
|
+
get ctrlAppStoreVersion() { return this.form.get(ctrlAppStoreVersion); }
|
|
44
|
+
ionViewWillEnter() {
|
|
45
|
+
this.delayedPercentage = 0;
|
|
46
|
+
this.percentage = 0;
|
|
47
|
+
this.performAutomaticUpdate().then(() => { });
|
|
48
|
+
this.startLoaderSync();
|
|
49
|
+
this.changeStatus({
|
|
50
|
+
percentage: 0,
|
|
51
|
+
text: this.translateService.instant(this.textCheckingForUpdates),
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
ionViewWillLeave() {
|
|
55
|
+
this.stopLoaderSync();
|
|
56
|
+
}
|
|
57
|
+
async performAutomaticUpdate() {
|
|
58
|
+
const deviceInfo = await Device.getInfo();
|
|
59
|
+
if (deviceInfo?.platform === 'web') {
|
|
60
|
+
// Local? Skip the update page.
|
|
61
|
+
this.closeUpdateScreen();
|
|
62
|
+
}
|
|
63
|
+
try {
|
|
64
|
+
this.updateInfo();
|
|
65
|
+
// Start upgrade
|
|
66
|
+
const currentVersion = await this.deploy.getCurrentVersion();
|
|
67
|
+
if (currentVersion?.binaryVersionName) {
|
|
68
|
+
const binaryGroup = currentVersion.binaryVersionName.substring(0, 3); // e.g. "1.4"
|
|
69
|
+
const channelGroup = currentVersion.channel.split('-')[1].substring(0, 3); // e.g. "1.4"
|
|
70
|
+
const channelType = currentVersion.channel.split('-')[0];
|
|
71
|
+
if (binaryGroup != channelGroup) {
|
|
72
|
+
await this.deploy.configure({
|
|
73
|
+
appId: '18d6e5fb',
|
|
74
|
+
channel: `${channelType}-${binaryGroup}.x`
|
|
75
|
+
}).then(() => {
|
|
76
|
+
this.sync().then(() => { });
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
else {
|
|
80
|
+
this.sync().then(() => { });
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
else {
|
|
84
|
+
this.sync().then(() => { });
|
|
85
|
+
}
|
|
86
|
+
// End upgrade
|
|
87
|
+
}
|
|
88
|
+
catch (error) {
|
|
89
|
+
this.changeStatus({
|
|
90
|
+
closeScreen: true,
|
|
91
|
+
error,
|
|
92
|
+
percentage: 100,
|
|
93
|
+
text: this.translateService.instant(this.textUnexpectedError)
|
|
94
|
+
});
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
async sync() {
|
|
98
|
+
try {
|
|
99
|
+
this.updateInfo();
|
|
100
|
+
const updateAvailableInfo = await this.deploy.checkForUpdate();
|
|
101
|
+
if (!updateAvailableInfo.available) {
|
|
102
|
+
// No update available
|
|
103
|
+
this.changeStatus({
|
|
104
|
+
closeScreen: true,
|
|
105
|
+
percentage: 0,
|
|
106
|
+
text: this.translateService.instant(this.textNoUpdatesAvailable),
|
|
107
|
+
});
|
|
108
|
+
}
|
|
109
|
+
else {
|
|
110
|
+
// Download update
|
|
111
|
+
await this.deploy.sync({ updateMethod: 'auto' }, (percentage) => {
|
|
112
|
+
this.changeStatus({
|
|
113
|
+
percentage: percentage ?? 0,
|
|
114
|
+
text: this.translateService.instant(this.textDownloadingUpdate, { percentage, version: updateAvailableInfo.build }),
|
|
115
|
+
});
|
|
116
|
+
}).catch((error) => {
|
|
117
|
+
this.changeStatus({
|
|
118
|
+
closeScreen: true,
|
|
119
|
+
error,
|
|
120
|
+
percentage: 100,
|
|
121
|
+
text: this.translateService.instant(this.textErrorWhileUpdatingApp),
|
|
122
|
+
});
|
|
123
|
+
});
|
|
124
|
+
this.changeStatus({
|
|
125
|
+
closeScreen: true,
|
|
126
|
+
percentage: 100,
|
|
127
|
+
text: this.translateService.instant(this.textFinishedUpdating, { version: updateAvailableInfo.build })
|
|
128
|
+
});
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
catch (error) {
|
|
132
|
+
// Catch unexpected plug-in errors
|
|
133
|
+
this.changeStatus({
|
|
134
|
+
closeScreen: true,
|
|
135
|
+
error,
|
|
136
|
+
percentage: 100,
|
|
137
|
+
text: this.translateService.instant(this.textUnexpectedError)
|
|
138
|
+
});
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
async updateInfo() {
|
|
142
|
+
const currentVersion = await this.deploy.getCurrentVersion();
|
|
143
|
+
const configuration = await this.deploy.getConfiguration();
|
|
144
|
+
const updateAvailableInfo = await this.deploy.checkForUpdate();
|
|
145
|
+
if (currentVersion) {
|
|
146
|
+
this.ctrlVersionNumber.setValue({
|
|
147
|
+
value: configuration?.currentBuildId,
|
|
148
|
+
});
|
|
149
|
+
this.ctrlNextVersionNumber.setValue({
|
|
150
|
+
value: updateAvailableInfo?.build
|
|
151
|
+
});
|
|
152
|
+
this.ctrlConfiguredChannel.setValue({
|
|
153
|
+
value: configuration ? configuration.channel : null
|
|
154
|
+
});
|
|
155
|
+
this.ctrlAppStoreVersion.setValue({
|
|
156
|
+
value: configuration ? configuration.binaryVersionName : null
|
|
157
|
+
});
|
|
158
|
+
{
|
|
159
|
+
const scope = getCurrentScope();
|
|
160
|
+
scope.setTag('version_binary_code', currentVersion?.binaryVersionCode);
|
|
161
|
+
scope.setTag('version_binary_name', currentVersion?.binaryVersionName);
|
|
162
|
+
scope.setTag('version_build_id', currentVersion?.buildId);
|
|
163
|
+
scope.setTag('channel_type', currentVersion?.channel);
|
|
164
|
+
scope.setTag('version_snapshot_id', currentVersion?.versionId);
|
|
165
|
+
}
|
|
166
|
+
;
|
|
167
|
+
this.changeDetector.markForCheck();
|
|
168
|
+
this.applicationRef.tick();
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
changeStatus(status) {
|
|
172
|
+
this.updateStatus = status.text;
|
|
173
|
+
this.percentage = status.percentage;
|
|
174
|
+
if (status.closeScreen) {
|
|
175
|
+
this.closeUpdateScreen();
|
|
176
|
+
}
|
|
177
|
+
if (status.error) {
|
|
178
|
+
// this.appStore.dispatch(
|
|
179
|
+
// sharedToasterActions.CREATE_ERROR({
|
|
180
|
+
// messageText: status.error,
|
|
181
|
+
// })
|
|
182
|
+
// );
|
|
183
|
+
}
|
|
184
|
+
this.changeDetector.markForCheck();
|
|
185
|
+
this.applicationRef.tick();
|
|
186
|
+
}
|
|
187
|
+
closeUpdateScreen() {
|
|
188
|
+
// Allowing some time to make a screenshot of version info
|
|
189
|
+
SpxStorage.clearSetting(SpxStorageKeyEnum.updateInProgress);
|
|
190
|
+
setTimeout(() => {
|
|
191
|
+
if (SpxStorage.getSetting(SpxStorageKeyEnum.afterSignIn) &&
|
|
192
|
+
this.spxIsSignedIn) {
|
|
193
|
+
this.router.navigate([SpxStorage.getSetting(SpxStorageKeyEnum.afterSignIn)]);
|
|
194
|
+
SpxStorage.clearSetting(SpxStorageKeyEnum.afterSignIn);
|
|
195
|
+
}
|
|
196
|
+
else {
|
|
197
|
+
this.router.navigate([this.spxHomeUrl]);
|
|
198
|
+
}
|
|
199
|
+
}, 0);
|
|
200
|
+
}
|
|
201
|
+
startLoaderSync() {
|
|
202
|
+
SpxStorage.setSetting(SpxStorageKeyEnum.updateInProgress, '1');
|
|
203
|
+
if (this.syncTruckInterval === null) {
|
|
204
|
+
this.syncTruckInterval = setInterval(() => {
|
|
205
|
+
this.delayedPercentage = this.percentage;
|
|
206
|
+
}, 200);
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
stopLoaderSync() {
|
|
210
|
+
if (this.syncTruckInterval !== null) {
|
|
211
|
+
clearInterval(this.syncTruckInterval);
|
|
212
|
+
this.syncTruckInterval = null;
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.1", ngImport: i0, type: SpxButtonComponent, deps: [{ token: i1.Deploy }, { token: i2.Router }, { token: i0.ChangeDetectorRef }, { token: i0.ApplicationRef }, { token: i3.TranslateService }, { token: i4.FormBuilder }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
216
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.1.1", type: SpxButtonComponent, isStandalone: true, selector: "spx-button", inputs: { spxHomeUrl: "spxHomeUrl", spxIsSignedIn: "spxIsSignedIn", textCheckingForUpdates: "textCheckingForUpdates", textDownloadingUpdate: "textDownloadingUpdate", textErrorWhileUpdatingApp: "textErrorWhileUpdatingApp", textFinishedUpdating: "textFinishedUpdating", textNoUpdatesAvailable: "textNoUpdatesAvailable", textUnexpectedError: "textUnexpectedError", txtAppStoreVersion: "txtAppStoreVersion", txtChannel: "txtChannel", txtNextVersion: "txtNextVersion", txtUpdate: "txtUpdate", txtVersion: "txtVersion" }, ngImport: i0, template: `<ion-header>
|
|
217
|
+
<ion-toolbar>
|
|
218
|
+
<ion-title>
|
|
219
|
+
{{ txtUpdate | translate | capitalize }}
|
|
220
|
+
</ion-title>
|
|
221
|
+
</ion-toolbar>
|
|
222
|
+
</ion-header>
|
|
223
|
+
|
|
224
|
+
<ion-content class="ion-content--upd" [fullscreen]="true">
|
|
225
|
+
<div class="ion-padding">
|
|
226
|
+
<spx-progress-bar [spxPercentage]="delayedPercentage" [spxTitle]="updateStatus | capitalize">
|
|
227
|
+
</spx-progress-bar>
|
|
228
|
+
<form [formGroup]="form" class="mt-3">
|
|
229
|
+
<div *ngIf="ctrlAppStoreVersion.value && ctrlAppStoreVersion.value.value" class="grid grid-cols-1 md:grid-cols-2 xl:grid-cols-3 gap-3">
|
|
230
|
+
<spx-input [formControl]="ctrlAppStoreVersion" [spxLabel]="txtAppStoreVersion | translate | capitalize"
|
|
231
|
+
[spxReadonly]="true"></spx-input>
|
|
232
|
+
<spx-input [formControl]="ctrlConfiguredChannel" [spxLabel]="txtChannel | translate | capitalize"
|
|
233
|
+
[spxReadonly]="true"></spx-input>
|
|
234
|
+
<spx-input [formControl]="ctrlVersionNumber" [spxLabel]="txtVersion | translate | capitalize"
|
|
235
|
+
[spxReadonly]="true"></spx-input>
|
|
236
|
+
<spx-input *ngIf="ctrlNextVersionNumber.value && ctrlNextVersionNumber.value.value" [formControl]="ctrlNextVersionNumber" [spxLabel]="txtNextVersion | translate | capitalize"
|
|
237
|
+
[spxReadonly]="true"></spx-input>
|
|
238
|
+
</div>
|
|
239
|
+
</form>
|
|
240
|
+
</div>
|
|
241
|
+
</ion-content>`, isInline: true, dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i4.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "component", type: IonContent, selector: "ion-content", inputs: ["color", "fixedSlotPlacement", "forceOverscroll", "fullscreen", "scrollEvents", "scrollX", "scrollY"] }, { kind: "component", type: IonHeader, selector: "ion-header", inputs: ["collapse", "mode", "translucent"] }, { kind: "component", type: IonTitle, selector: "ion-title", inputs: ["color", "size"] }, { kind: "component", type: IonToolbar, selector: "ion-toolbar", inputs: ["color", "mode"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i4.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i4.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "pipe", type: SpxCapitalizePipe, name: "capitalize" }, { kind: "component", type: SpxInputComponent, selector: "spx-input", inputs: ["spxLabel", "spxMax", "spxMin", "spxName", "spxReadonly", "spxAutofocus", "spxInputMode", "spxPattern", "spxRequired", "spxSelectMonth", "spxSelectDay", "spxShowEdit", "spxShowHelp", "spxShowLabel", "spxCompact", "spxShowClear", "spxShowSearch", "spxShowValidationMessages", "spxStep", "spxSuggestions", "spxType", "spxValidators", "value", "spxCapitalize", "spxFocused"], outputs: ["spxBlur", "spxClear", "spxChange", "spxFocus", "spxEdit", "spxHelp", "spxSearch"] }, { kind: "component", type: SpxProgressBarComponent, selector: "spx-progress-bar", inputs: ["spxPercentage", "spxTitle"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i3.TranslatePipe, name: "translate" }] }); }
|
|
242
|
+
}
|
|
243
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.1", ngImport: i0, type: SpxButtonComponent, decorators: [{
|
|
244
|
+
type: Component,
|
|
245
|
+
args: [{
|
|
246
|
+
selector: 'spx-button',
|
|
247
|
+
standalone: true,
|
|
248
|
+
imports: [
|
|
249
|
+
FormsModule,
|
|
250
|
+
IonContent,
|
|
251
|
+
IonHeader,
|
|
252
|
+
IonTitle,
|
|
253
|
+
IonToolbar,
|
|
254
|
+
NgClass,
|
|
255
|
+
ReactiveFormsModule,
|
|
256
|
+
SpxCapitalizePipe,
|
|
257
|
+
SpxInputComponent,
|
|
258
|
+
SpxProgressBarComponent,
|
|
259
|
+
TranslateModule,
|
|
260
|
+
],
|
|
261
|
+
template: `<ion-header>
|
|
262
|
+
<ion-toolbar>
|
|
263
|
+
<ion-title>
|
|
264
|
+
{{ txtUpdate | translate | capitalize }}
|
|
265
|
+
</ion-title>
|
|
266
|
+
</ion-toolbar>
|
|
267
|
+
</ion-header>
|
|
268
|
+
|
|
269
|
+
<ion-content class="ion-content--upd" [fullscreen]="true">
|
|
270
|
+
<div class="ion-padding">
|
|
271
|
+
<spx-progress-bar [spxPercentage]="delayedPercentage" [spxTitle]="updateStatus | capitalize">
|
|
272
|
+
</spx-progress-bar>
|
|
273
|
+
<form [formGroup]="form" class="mt-3">
|
|
274
|
+
<div *ngIf="ctrlAppStoreVersion.value && ctrlAppStoreVersion.value.value" class="grid grid-cols-1 md:grid-cols-2 xl:grid-cols-3 gap-3">
|
|
275
|
+
<spx-input [formControl]="ctrlAppStoreVersion" [spxLabel]="txtAppStoreVersion | translate | capitalize"
|
|
276
|
+
[spxReadonly]="true"></spx-input>
|
|
277
|
+
<spx-input [formControl]="ctrlConfiguredChannel" [spxLabel]="txtChannel | translate | capitalize"
|
|
278
|
+
[spxReadonly]="true"></spx-input>
|
|
279
|
+
<spx-input [formControl]="ctrlVersionNumber" [spxLabel]="txtVersion | translate | capitalize"
|
|
280
|
+
[spxReadonly]="true"></spx-input>
|
|
281
|
+
<spx-input *ngIf="ctrlNextVersionNumber.value && ctrlNextVersionNumber.value.value" [formControl]="ctrlNextVersionNumber" [spxLabel]="txtNextVersion | translate | capitalize"
|
|
282
|
+
[spxReadonly]="true"></spx-input>
|
|
283
|
+
</div>
|
|
284
|
+
</form>
|
|
285
|
+
</div>
|
|
286
|
+
</ion-content>`,
|
|
287
|
+
}]
|
|
288
|
+
}], ctorParameters: () => [{ type: i1.Deploy }, { type: i2.Router }, { type: i0.ChangeDetectorRef }, { type: i0.ApplicationRef }, { type: i3.TranslateService }, { type: i4.FormBuilder }], propDecorators: { spxHomeUrl: [{
|
|
289
|
+
type: Input
|
|
290
|
+
}], spxIsSignedIn: [{
|
|
291
|
+
type: Input
|
|
292
|
+
}], textCheckingForUpdates: [{
|
|
293
|
+
type: Input
|
|
294
|
+
}], textDownloadingUpdate: [{
|
|
295
|
+
type: Input
|
|
296
|
+
}], textErrorWhileUpdatingApp: [{
|
|
297
|
+
type: Input
|
|
298
|
+
}], textFinishedUpdating: [{
|
|
299
|
+
type: Input
|
|
300
|
+
}], textNoUpdatesAvailable: [{
|
|
301
|
+
type: Input
|
|
302
|
+
}], textUnexpectedError: [{
|
|
303
|
+
type: Input
|
|
304
|
+
}], txtAppStoreVersion: [{
|
|
305
|
+
type: Input
|
|
306
|
+
}], txtChannel: [{
|
|
307
|
+
type: Input
|
|
308
|
+
}], txtNextVersion: [{
|
|
309
|
+
type: Input
|
|
310
|
+
}], txtUpdate: [{
|
|
311
|
+
type: Input
|
|
312
|
+
}], txtVersion: [{
|
|
313
|
+
type: Input
|
|
314
|
+
}] } });
|
|
315
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3B4LWFwcC11cGRhdGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc29mdHBhay9jb21wb25lbnRzL3NweC1hcHAtdXBkYXRlL3NweC1hcHAtdXBkYXRlLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDMUMsT0FBTyxFQUFxQyxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3BGLE9BQU8sRUFBdUMsV0FBVyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFdkcsT0FBTyxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3hGLE9BQU8sRUFBRSxlQUFlLEVBQW9CLE1BQU0scUJBQXFCLENBQUM7QUFDeEUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDdkUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDbkUsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDL0UsT0FBTyxFQUFFLFVBQVUsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ2hGLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUUzQyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0saUJBQWlCLENBQUM7Ozs7OztBQUVsRCxNQUFNLHFCQUFxQixHQUFHLHVCQUF1QixDQUFDO0FBQ3RELE1BQU0saUJBQWlCLEdBQUcsbUJBQW1CLENBQUM7QUFDOUMsTUFBTSxxQkFBcUIsR0FBRyx1QkFBdUIsQ0FBQztBQUN0RCxNQUFNLG1CQUFtQixHQUFHLHFCQUFxQixDQUFDO0FBNkNsRCxNQUFNLE9BQU8sa0JBQWtC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RyxtQkFBbUI7c0JBQTNCLEtBQUs7Z0JBQ0csa0JBQWtCO3NCQUExQixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csY0FBYztzQkFBdEIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ0NsYXNzIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEFwcGxpY2F0aW9uUmVmLCBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUJ1aWxkZXIsIEZvcm1Db250cm9sLCBGb3JtR3JvdXAsIEZvcm1zTW9kdWxlLCBSZWFjdGl2ZUZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IElvbkNvbnRlbnQsIElvbkhlYWRlciwgSW9uVG9vbGJhciwgSW9uVGl0bGUgfSBmcm9tICdAaW9uaWMvYW5ndWxhci9zdGFuZGFsb25lJztcbmltcG9ydCB7IFRyYW5zbGF0ZU1vZHVsZSwgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgU3B4Q2FwaXRhbGl6ZVBpcGUgfSBmcm9tICdAc29mdHBhay9jb21wb25lbnRzL3NweC1jYXBpdGFsaXplJztcbmltcG9ydCB7IFNweElucHV0Q29tcG9uZW50IH0gZnJvbSAnQHNvZnRwYWsvY29tcG9uZW50cy9zcHgtaW5wdXRzJztcbmltcG9ydCB7IFNweFByb2dyZXNzQmFyQ29tcG9uZW50IH0gZnJvbSAnQHNvZnRwYWsvY29tcG9uZW50cy9zcHgtcHJvZ3Jlc3MtYmFyJztcbmltcG9ydCB7IFNweFN0b3JhZ2UsIFNweFN0b3JhZ2VLZXlFbnVtIH0gZnJvbSAnQHNvZnRwYWsvY29tcG9uZW50cy9zcHgtc3RvcmFnZSc7XG5pbXBvcnQgeyBEZXZpY2UgfSBmcm9tICdAY2FwYWNpdG9yL2RldmljZSc7XG5pbXBvcnQgeyBEZXBsb3kgfSBmcm9tICdjb3Jkb3ZhLXBsdWdpbi1pb25pYy9kaXN0L25neCc7XG5pbXBvcnQgeyBnZXRDdXJyZW50U2NvcGUgfSBmcm9tICdAc2VudHJ5L2FuZ3VsYXInO1xuXG5jb25zdCBjdHJsTmV4dFZlcnNpb25OdW1iZXIgPSAnY3RybE5leHRWZXJzaW9uTnVtYmVyJztcbmNvbnN0IGN0cmxWZXJzaW9uTnVtYmVyID0gJ2N0cmxWZXJzaW9uTnVtYmVyJztcbmNvbnN0IGN0cmxDb25maWd1cmVkQ2hhbm5lbCA9ICdjdHJsQ29uZmlndXJlZENoYW5uZWwnO1xuY29uc3QgY3RybEFwcFN0b3JlVmVyc2lvbiA9ICdjdHJsQXBwU3RvcmVWZXJzaW9uJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnc3B4LWJ1dHRvbicsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBGb3Jtc01vZHVsZSxcbiAgICBJb25Db250ZW50LFxuICAgIElvbkhlYWRlcixcbiAgICBJb25UaXRsZSxcbiAgICBJb25Ub29sYmFyLFxuICAgIE5nQ2xhc3MsXG4gICAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcbiAgICBTcHhDYXBpdGFsaXplUGlwZSxcbiAgICBTcHhJbnB1dENvbXBvbmVudCxcbiAgICBTcHhQcm9ncmVzc0JhckNvbXBvbmVudCxcbiAgICBUcmFuc2xhdGVNb2R1bGUsXG4gIF0sXG4gIHRlbXBsYXRlOiBgPGlvbi1oZWFkZXI+XG4gIDxpb24tdG9vbGJhcj5cbiAgICA8aW9uLXRpdGxlPlxuICAgICAge3sgdHh0VXBkYXRlIHwgdHJhbnNsYXRlIHwgY2FwaXRhbGl6ZSB9fVxuICAgIDwvaW9uLXRpdGxlPlxuICA8L2lvbi10b29sYmFyPlxuPC9pb24taGVhZGVyPlxuXG48aW9uLWNvbnRlbnQgY2xhc3M9XCJpb24tY29udGVudC0tdXBkXCIgW2Z1bGxzY3JlZW5dPVwidHJ1ZVwiPlxuICA8ZGl2IGNsYXNzPVwiaW9uLXBhZGRpbmdcIj5cbiAgICA8c3B4LXByb2dyZXNzLWJhciBbc3B4UGVyY2VudGFnZV09XCJkZWxheWVkUGVyY2VudGFnZVwiIFtzcHhUaXRsZV09XCJ1cGRhdGVTdGF0dXMgfCBjYXBpdGFsaXplXCI+XG4gICAgPC9zcHgtcHJvZ3Jlc3MtYmFyPlxuICAgIDxmb3JtIFtmb3JtR3JvdXBdPVwiZm9ybVwiIGNsYXNzPVwibXQtM1wiPlxuICAgICAgPGRpdiAqbmdJZj1cImN0cmxBcHBTdG9yZVZlcnNpb24udmFsdWUgJiYgY3RybEFwcFN0b3JlVmVyc2lvbi52YWx1ZS52YWx1ZVwiIGNsYXNzPVwiZ3JpZCBncmlkLWNvbHMtMSBtZDpncmlkLWNvbHMtMiB4bDpncmlkLWNvbHMtMyBnYXAtM1wiPlxuICAgICAgICA8c3B4LWlucHV0IFtmb3JtQ29udHJvbF09XCJjdHJsQXBwU3RvcmVWZXJzaW9uXCIgW3NweExhYmVsXT1cInR4dEFwcFN0b3JlVmVyc2lvbiB8IHRyYW5zbGF0ZSB8IGNhcGl0YWxpemVcIlxuICAgICAgICAgIFtzcHhSZWFkb25seV09XCJ0cnVlXCI+PC9zcHgtaW5wdXQ+XG4gICAgICAgIDxzcHgtaW5wdXQgW2Zvcm1Db250cm9sXT1cImN0cmxDb25maWd1cmVkQ2hhbm5lbFwiIFtzcHhMYWJlbF09XCJ0eHRDaGFubmVsIHwgdHJhbnNsYXRlIHwgY2FwaXRhbGl6ZVwiXG4gICAgICAgICAgW3NweFJlYWRvbmx5XT1cInRydWVcIj48L3NweC1pbnB1dD5cbiAgICAgICAgPHNweC1pbnB1dCBbZm9ybUNvbnRyb2xdPVwiY3RybFZlcnNpb25OdW1iZXJcIiBbc3B4TGFiZWxdPVwidHh0VmVyc2lvbiB8IHRyYW5zbGF0ZSB8IGNhcGl0YWxpemVcIlxuICAgICAgICAgIFtzcHhSZWFkb25seV09XCJ0cnVlXCI+PC9zcHgtaW5wdXQ+XG4gICAgICAgIDxzcHgtaW5wdXQgKm5nSWY9XCJjdHJsTmV4dFZlcnNpb25OdW1iZXIudmFsdWUgJiYgY3RybE5leHRWZXJzaW9uTnVtYmVyLnZhbHVlLnZhbHVlXCIgW2Zvcm1Db250cm9sXT1cImN0cmxOZXh0VmVyc2lvbk51bWJlclwiIFtzcHhMYWJlbF09XCJ0eHROZXh0VmVyc2lvbiB8IHRyYW5zbGF0ZSB8IGNhcGl0YWxpemVcIlxuICAgICAgICAgIFtzcHhSZWFkb25seV09XCJ0cnVlXCI+PC9zcHgtaW5wdXQ+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Zvcm0+XG4gIDwvZGl2PlxuPC9pb24tY29udGVudD5gLFxufSlcbmV4cG9ydCBjbGFzcyBTcHhCdXR0b25Db21wb25lbnQge1xuICBASW5wdXQoKSBzcHhIb21lVXJsITogc3RyaW5nO1xuICBASW5wdXQoKSBzcHhJc1NpZ25lZEluITogYm9vbGVhbjtcbiAgQElucHV0KCkgdGV4dENoZWNraW5nRm9yVXBkYXRlcyE6IHN0cmluZztcbiAgQElucHV0KCkgdGV4dERvd25sb2FkaW5nVXBkYXRlITogc3RyaW5nO1xuICBASW5wdXQoKSB0ZXh0RXJyb3JXaGlsZVVwZGF0aW5nQXBwITogc3RyaW5nO1xuICBASW5wdXQoKSB0ZXh0RmluaXNoZWRVcGRhdGluZyE6IHN0cmluZztcbiAgQElucHV0KCkgdGV4dE5vVXBkYXRlc0F2YWlsYWJsZSE6IHN0cmluZztcbiAgQElucHV0KCkgdGV4dFVuZXhwZWN0ZWRFcnJvciE6IHN0cmluZztcbiAgQElucHV0KCkgdHh0QXBwU3RvcmVWZXJzaW9uITogc3RyaW5nO1xuICBASW5wdXQoKSB0eHRDaGFubmVsITogc3RyaW5nO1xuICBASW5wdXQoKSB0eHROZXh0VmVyc2lvbiE6IHN0cmluZztcbiAgQElucHV0KCkgdHh0VXBkYXRlITogc3RyaW5nO1xuICBASW5wdXQoKSB0eHRWZXJzaW9uITogc3RyaW5nO1xuXG4gIGZvcm06IEZvcm1Hcm91cDtcblxuICBkZWxheWVkUGVyY2VudGFnZTogbnVtYmVyID0gMDtcbiAgcGVyY2VudGFnZTogbnVtYmVyID0gMDtcbiAgc3luY1RydWNrSW50ZXJ2YWw6IGFueSB8IG51bGwgPSBudWxsO1xuICB1cGRhdGVTdGF0dXM6IHN0cmluZyA9IHRoaXMudGV4dENoZWNraW5nRm9yVXBkYXRlcztcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IGRlcGxveTogRGVwbG95LFxuICAgIHByaXZhdGUgcmVhZG9ubHkgcm91dGVyOiBSb3V0ZXIsXG4gICAgcHJpdmF0ZSByZWFkb25seSBjaGFuZ2VEZXRlY3RvcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgcHJpdmF0ZSByZWFkb25seSBhcHBsaWNhdGlvblJlZjogQXBwbGljYXRpb25SZWYsXG4gICAgcHJpdmF0ZSByZWFkb25seSB0cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgZm9ybUJ1aWxkZXI6IEZvcm1CdWlsZGVyLFxuICApIHtcbiAgICB0aGlzLmZvcm0gPSB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKHtcbiAgICAgIFtjdHJsTmV4dFZlcnNpb25OdW1iZXJdOiBbbnVsbCwgW11dLFxuICAgICAgW2N0cmxWZXJzaW9uTnVtYmVyXTogW251bGwsIFtdXSxcbiAgICAgIFtjdHJsQ29uZmlndXJlZENoYW5uZWxdOiBbbnVsbCwgW11dLFxuICAgICAgW2N0cmxBcHBTdG9yZVZlcnNpb25dOiBbbnVsbCwgW11dLFxuICAgIH0pO1xuICB9XG5cbiAgZ2V0IGN0cmxWZXJzaW9uTnVtYmVyKCk6IEZvcm1Db250cm9sIHsgcmV0dXJuIHRoaXMuZm9ybS5nZXQoY3RybFZlcnNpb25OdW1iZXIpIGFzIEZvcm1Db250cm9sOyB9XG4gIGdldCBjdHJsTmV4dFZlcnNpb25OdW1iZXIoKTogRm9ybUNvbnRyb2wgeyByZXR1cm4gdGhpcy5mb3JtLmdldChjdHJsTmV4dFZlcnNpb25OdW1iZXIpIGFzIEZvcm1Db250cm9sOyB9XG4gIGdldCBjdHJsQ29uZmlndXJlZENoYW5uZWwoKTogRm9ybUNvbnRyb2wgeyByZXR1cm4gdGhpcy5mb3JtLmdldChjdHJsQ29uZmlndXJlZENoYW5uZWwpIGFzIEZvcm1Db250cm9sOyB9XG4gIGdldCBjdHJsQXBwU3RvcmVWZXJzaW9uKCk6IEZvcm1Db250cm9sIHsgcmV0dXJuIHRoaXMuZm9ybS5nZXQoY3RybEFwcFN0b3JlVmVyc2lvbikgYXMgRm9ybUNvbnRyb2w7IH1cblxuICBpb25WaWV3V2lsbEVudGVyKCkge1xuICAgIHRoaXMuZGVsYXllZFBlcmNlbnRhZ2UgPSAwO1xuICAgIHRoaXMucGVyY2VudGFnZSA9IDA7XG4gICAgdGhpcy5wZXJmb3JtQXV0b21hdGljVXBkYXRlKCkudGhlbigoKSA9PiB7IH0pO1xuICAgIHRoaXMuc3RhcnRMb2FkZXJTeW5jKCk7XG4gICAgdGhpcy5jaGFuZ2VTdGF0dXMoe1xuICAgICAgcGVyY2VudGFnZTogMCxcbiAgICAgIHRleHQ6IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KHRoaXMudGV4dENoZWNraW5nRm9yVXBkYXRlcyksXG4gICAgfSk7XG4gIH1cblxuICBpb25WaWV3V2lsbExlYXZlKCkge1xuICAgIHRoaXMuc3RvcExvYWRlclN5bmMoKTtcbiAgfVxuXG4gIGFzeW5jIHBlcmZvcm1BdXRvbWF0aWNVcGRhdGUoKSB7XG4gICAgY29uc3QgZGV2aWNlSW5mbyA9IGF3YWl0IERldmljZS5nZXRJbmZvKCk7XG5cbiAgICBpZiAoZGV2aWNlSW5mbz8ucGxhdGZvcm0gPT09ICd3ZWInKSB7XG4gICAgICAvLyBMb2NhbD8gU2tpcCB0aGUgdXBkYXRlIHBhZ2UuXG4gICAgICB0aGlzLmNsb3NlVXBkYXRlU2NyZWVuKCk7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICB0aGlzLnVwZGF0ZUluZm8oKTtcblxuICAgICAgLy8gU3RhcnQgdXBncmFkZVxuICAgICAgY29uc3QgY3VycmVudFZlcnNpb24gPSBhd2FpdCB0aGlzLmRlcGxveS5nZXRDdXJyZW50VmVyc2lvbigpO1xuICAgICAgaWYgKGN1cnJlbnRWZXJzaW9uPy5iaW5hcnlWZXJzaW9uTmFtZSkge1xuICAgICAgICBjb25zdCBiaW5hcnlHcm91cCA9IGN1cnJlbnRWZXJzaW9uLmJpbmFyeVZlcnNpb25OYW1lLnN1YnN0cmluZygwLCAzKTsgLy8gZS5nLiBcIjEuNFwiXG4gICAgICAgIGNvbnN0IGNoYW5uZWxHcm91cCA9IGN1cnJlbnRWZXJzaW9uLmNoYW5uZWwuc3BsaXQoJy0nKVsxXS5zdWJzdHJpbmcoMCwgMyk7IC8vIGUuZy4gXCIxLjRcIlxuICAgICAgICBjb25zdCBjaGFubmVsVHlwZSA9IGN1cnJlbnRWZXJzaW9uLmNoYW5uZWwuc3BsaXQoJy0nKVswXTtcblxuICAgICAgICBpZiAoYmluYXJ5R3JvdXAgIT0gY2hhbm5lbEdyb3VwKSB7XG4gICAgICAgICAgYXdhaXQgdGhpcy5kZXBsb3kuY29uZmlndXJlKHtcbiAgICAgICAgICAgIGFwcElkOiAnMThkNmU1ZmInLFxuICAgICAgICAgICAgY2hhbm5lbDogYCR7Y2hhbm5lbFR5cGV9LSR7YmluYXJ5R3JvdXB9LnhgXG4gICAgICAgICAgfSkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnN5bmMoKS50aGVuKCgpID0+IHsgfSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5zeW5jKCkudGhlbigoKSA9PiB7IH0pO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnN5bmMoKS50aGVuKCgpID0+IHsgfSk7XG4gICAgICB9XG4gICAgICAvLyBFbmQgdXBncmFkZVxuICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgIHRoaXMuY2hhbmdlU3RhdHVzKHtcbiAgICAgICAgY2xvc2VTY3JlZW46IHRydWUsXG4gICAgICAgIGVycm9yLFxuICAgICAgICBwZXJjZW50YWdlOiAxMDAsXG4gICAgICAgIHRleHQ6IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KHRoaXMudGV4dFVuZXhwZWN0ZWRFcnJvcilcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgc3luYygpIHtcbiAgICB0cnkge1xuICAgICAgdGhpcy51cGRhdGVJbmZvKCk7XG5cbiAgICAgIGNvbnN0IHVwZGF0ZUF2YWlsYWJsZUluZm8gPSBhd2FpdCB0aGlzLmRlcGxveS5jaGVja0ZvclVwZGF0ZSgpO1xuICAgICAgaWYgKCF1cGRhdGVBdmFpbGFibGVJbmZvLmF2YWlsYWJsZSkge1xuICAgICAgICAvLyBObyB1cGRhdGUgYXZhaWxhYmxlXG4gICAgICAgIHRoaXMuY2hhbmdlU3RhdHVzKHtcbiAgICAgICAgICBjbG9zZVNjcmVlbjogdHJ1ZSxcbiAgICAgICAgICBwZXJjZW50YWdlOiAwLFxuICAgICAgICAgIHRleHQ6IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KHRoaXMudGV4dE5vVXBkYXRlc0F2YWlsYWJsZSksXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gRG93bmxvYWQgdXBkYXRlXG4gICAgICAgIGF3YWl0IHRoaXMuZGVwbG95LnN5bmMoeyB1cGRhdGVNZXRob2Q6ICdhdXRvJyB9LCAocGVyY2VudGFnZSkgPT4ge1xuICAgICAgICAgIHRoaXMuY2hhbmdlU3RhdHVzKHtcbiAgICAgICAgICAgIHBlcmNlbnRhZ2U6IHBlcmNlbnRhZ2UgPz8gMCxcbiAgICAgICAgICAgIHRleHQ6IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KHRoaXMudGV4dERvd25sb2FkaW5nVXBkYXRlLCB7IHBlcmNlbnRhZ2UsIHZlcnNpb246IHVwZGF0ZUF2YWlsYWJsZUluZm8uYnVpbGQgfSksXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgICAgIHRoaXMuY2hhbmdlU3RhdHVzKHtcbiAgICAgICAgICAgIGNsb3NlU2NyZWVuOiB0cnVlLFxuICAgICAgICAgICAgZXJyb3IsXG4gICAgICAgICAgICBwZXJjZW50YWdlOiAxMDAsXG4gICAgICAgICAgICB0ZXh0OiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCh0aGlzLnRleHRFcnJvcldoaWxlVXBkYXRpbmdBcHApLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLmNoYW5nZVN0YXR1cyh7XG4gICAgICAgICAgY2xvc2VTY3JlZW46IHRydWUsXG4gICAgICAgICAgcGVyY2VudGFnZTogMTAwLFxuICAgICAgICAgIHRleHQ6IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KHRoaXMudGV4dEZpbmlzaGVkVXBkYXRpbmcsIHsgdmVyc2lvbjogdXBkYXRlQXZhaWxhYmxlSW5mby5idWlsZCB9KVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICAvLyBDYXRjaCB1bmV4cGVjdGVkIHBsdWctaW4gZXJyb3JzXG4gICAgICB0aGlzLmNoYW5nZVN0YXR1cyh7XG4gICAgICAgIGNsb3NlU2NyZWVuOiB0cnVlLFxuICAgICAgICBlcnJvcixcbiAgICAgICAgcGVyY2VudGFnZTogMTAwLFxuICAgICAgICB0ZXh0OiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCh0aGlzLnRleHRVbmV4cGVjdGVkRXJyb3IpXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHVwZGF0ZUluZm8oKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgY3VycmVudFZlcnNpb24gPSBhd2FpdCB0aGlzLmRlcGxveS5nZXRDdXJyZW50VmVyc2lvbigpO1xuICAgIGNvbnN0IGNvbmZpZ3VyYXRpb24gPSBhd2FpdCB0aGlzLmRlcGxveS5nZXRDb25maWd1cmF0aW9uKCk7XG4gICAgY29uc3QgdXBkYXRlQXZhaWxhYmxlSW5mbyA9IGF3YWl0IHRoaXMuZGVwbG95LmNoZWNrRm9yVXBkYXRlKCk7XG5cbiAgICBpZiAoY3VycmVudFZlcnNpb24pIHtcbiAgICAgIHRoaXMuY3RybFZlcnNpb25OdW1iZXIuc2V0VmFsdWUoe1xuICAgICAgICB2YWx1ZTogY29uZmlndXJhdGlvbj8uY3VycmVudEJ1aWxkSWQsXG4gICAgICB9KTtcbiAgICAgIHRoaXMuY3RybE5leHRWZXJzaW9uTnVtYmVyLnNldFZhbHVlKHtcbiAgICAgICAgdmFsdWU6IHVwZGF0ZUF2YWlsYWJsZUluZm8/LmJ1aWxkXG4gICAgICB9KTtcbiAgICAgIHRoaXMuY3RybENvbmZpZ3VyZWRDaGFubmVsLnNldFZhbHVlKHtcbiAgICAgICAgdmFsdWU6IGNvbmZpZ3VyYXRpb24gPyBjb25maWd1cmF0aW9uLmNoYW5uZWwgOiBudWxsXG4gICAgICB9KTtcbiAgICAgIHRoaXMuY3RybEFwcFN0b3JlVmVyc2lvbi5zZXRWYWx1ZSh7XG4gICAgICAgIHZhbHVlOiBjb25maWd1cmF0aW9uID8gY29uZmlndXJhdGlvbi5iaW5hcnlWZXJzaW9uTmFtZSA6IG51bGxcbiAgICAgIH0pO1xuXG4gICAgICB7XG4gICAgICAgIGNvbnN0IHNjb3BlID0gZ2V0Q3VycmVudFNjb3BlKCk7XG4gICAgICAgIHNjb3BlLnNldFRhZygndmVyc2lvbl9iaW5hcnlfY29kZScsIGN1cnJlbnRWZXJzaW9uPy5iaW5hcnlWZXJzaW9uQ29kZSk7XG4gICAgICAgIHNjb3BlLnNldFRhZygndmVyc2lvbl9iaW5hcnlfbmFtZScsIGN1cnJlbnRWZXJzaW9uPy5iaW5hcnlWZXJzaW9uTmFtZSk7XG4gICAgICAgIHNjb3BlLnNldFRhZygndmVyc2lvbl9idWlsZF9pZCcsIGN1cnJlbnRWZXJzaW9uPy5idWlsZElkKTtcbiAgICAgICAgc2NvcGUuc2V0VGFnKCdjaGFubmVsX3R5cGUnLCBjdXJyZW50VmVyc2lvbj8uY2hhbm5lbCk7XG4gICAgICAgIHNjb3BlLnNldFRhZygndmVyc2lvbl9zbmFwc2hvdF9pZCcsIGN1cnJlbnRWZXJzaW9uPy52ZXJzaW9uSWQpO1xuICAgICAgfTtcblxuICAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgIHRoaXMuYXBwbGljYXRpb25SZWYudGljaygpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY2hhbmdlU3RhdHVzKHN0YXR1czoge1xuICAgIGVycm9yPzogc3RyaW5nO1xuICAgIHRleHQ6IHN0cmluZztcbiAgICBjbG9zZVNjcmVlbj86IGJvb2xlYW47XG4gICAgcGVyY2VudGFnZTogbnVtYmVyO1xuICB9KSB7XG4gICAgdGhpcy51cGRhdGVTdGF0dXMgPSBzdGF0dXMudGV4dDtcbiAgICB0aGlzLnBlcmNlbnRhZ2UgPSBzdGF0dXMucGVyY2VudGFnZTtcbiAgICBpZiAoc3RhdHVzLmNsb3NlU2NyZWVuKSB7XG4gICAgICB0aGlzLmNsb3NlVXBkYXRlU2NyZWVuKCk7XG4gICAgfVxuICAgIGlmIChzdGF0dXMuZXJyb3IpIHtcbiAgICAgIC8vIHRoaXMuYXBwU3RvcmUuZGlzcGF0Y2goXG4gICAgICAvLyAgIHNoYXJlZFRvYXN0ZXJBY3Rpb25zLkNSRUFURV9FUlJPUih7XG4gICAgICAvLyAgICAgbWVzc2FnZVRleHQ6IHN0YXR1cy5lcnJvcixcbiAgICAgIC8vICAgfSlcbiAgICAgIC8vICk7XG4gICAgfVxuICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XG4gICAgdGhpcy5hcHBsaWNhdGlvblJlZi50aWNrKCk7XG4gIH1cblxuICBwcml2YXRlIGNsb3NlVXBkYXRlU2NyZWVuKCkge1xuICAgIC8vIEFsbG93aW5nIHNvbWUgdGltZSB0byBtYWtlIGEgc2NyZWVuc2hvdCBvZiB2ZXJzaW9uIGluZm9cbiAgICBTcHhTdG9yYWdlLmNsZWFyU2V0dGluZzxhbnk+KFNweFN0b3JhZ2VLZXlFbnVtLnVwZGF0ZUluUHJvZ3Jlc3MpO1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgaWYgKFxuICAgICAgICBTcHhTdG9yYWdlLmdldFNldHRpbmc8YW55PihTcHhTdG9yYWdlS2V5RW51bS5hZnRlclNpZ25JbikgJiZcbiAgICAgICAgdGhpcy5zcHhJc1NpZ25lZEluXG4gICAgICApIHtcbiAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW1NweFN0b3JhZ2UuZ2V0U2V0dGluZzxhbnk+KFNweFN0b3JhZ2VLZXlFbnVtLmFmdGVyU2lnbkluKV0pO1xuICAgICAgICBTcHhTdG9yYWdlLmNsZWFyU2V0dGluZzxhbnk+KFNweFN0b3JhZ2VLZXlFbnVtLmFmdGVyU2lnbkluKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW3RoaXMuc3B4SG9tZVVybF0pO1xuICAgICAgfVxuICAgIH0sIDApO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGFydExvYWRlclN5bmMoKSB7XG4gICAgU3B4U3RvcmFnZS5zZXRTZXR0aW5nPGFueT4oU3B4U3RvcmFnZUtleUVudW0udXBkYXRlSW5Qcm9ncmVzcywgJzEnKTtcbiAgICBpZiAodGhpcy5zeW5jVHJ1Y2tJbnRlcnZhbCA9PT0gbnVsbCkge1xuICAgICAgdGhpcy5zeW5jVHJ1Y2tJbnRlcnZhbCA9IHNldEludGVydmFsKCgpID0+IHtcbiAgICAgICAgdGhpcy5kZWxheWVkUGVyY2VudGFnZSA9IHRoaXMucGVyY2VudGFnZTtcbiAgICAgIH0sIDIwMCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzdG9wTG9hZGVyU3luYygpIHtcbiAgICBpZiAodGhpcy5zeW5jVHJ1Y2tJbnRlcnZhbCAhPT0gbnVsbCkge1xuICAgICAgY2xlYXJJbnRlcnZhbCh0aGlzLnN5bmNUcnVja0ludGVydmFsKTtcbiAgICAgIHRoaXMuc3luY1RydWNrSW50ZXJ2YWwgPSBudWxsO1xuICAgIH1cbiAgfVxufVxuIl19
|
|
@@ -0,0 +1,322 @@
|
|
|
1
|
+
import { NgClass } from '@angular/common';
|
|
2
|
+
import * as i0 from '@angular/core';
|
|
3
|
+
import { Component, Input } from '@angular/core';
|
|
4
|
+
import * as i4 from '@angular/forms';
|
|
5
|
+
import { FormsModule, ReactiveFormsModule } from '@angular/forms';
|
|
6
|
+
import { IonContent, IonHeader, IonTitle, IonToolbar } from '@ionic/angular/standalone';
|
|
7
|
+
import * as i3 from '@ngx-translate/core';
|
|
8
|
+
import { TranslateModule } from '@ngx-translate/core';
|
|
9
|
+
import { SpxCapitalizePipe } from '@softpak/components/spx-capitalize';
|
|
10
|
+
import { SpxInputComponent } from '@softpak/components/spx-inputs';
|
|
11
|
+
import { SpxProgressBarComponent } from '@softpak/components/spx-progress-bar';
|
|
12
|
+
import { SpxStorage, SpxStorageKeyEnum } from '@softpak/components/spx-storage';
|
|
13
|
+
import { Device } from '@capacitor/device';
|
|
14
|
+
import { getCurrentScope } from '@sentry/angular';
|
|
15
|
+
import * as i1 from 'cordova-plugin-ionic/dist/ngx';
|
|
16
|
+
import * as i2 from '@angular/router';
|
|
17
|
+
|
|
18
|
+
const ctrlNextVersionNumber = 'ctrlNextVersionNumber';
|
|
19
|
+
const ctrlVersionNumber = 'ctrlVersionNumber';
|
|
20
|
+
const ctrlConfiguredChannel = 'ctrlConfiguredChannel';
|
|
21
|
+
const ctrlAppStoreVersion = 'ctrlAppStoreVersion';
|
|
22
|
+
class SpxButtonComponent {
|
|
23
|
+
constructor(deploy, router, changeDetector, applicationRef, translateService, formBuilder) {
|
|
24
|
+
this.deploy = deploy;
|
|
25
|
+
this.router = router;
|
|
26
|
+
this.changeDetector = changeDetector;
|
|
27
|
+
this.applicationRef = applicationRef;
|
|
28
|
+
this.translateService = translateService;
|
|
29
|
+
this.formBuilder = formBuilder;
|
|
30
|
+
this.delayedPercentage = 0;
|
|
31
|
+
this.percentage = 0;
|
|
32
|
+
this.syncTruckInterval = null;
|
|
33
|
+
this.updateStatus = this.textCheckingForUpdates;
|
|
34
|
+
this.form = this.formBuilder.group({
|
|
35
|
+
[ctrlNextVersionNumber]: [null, []],
|
|
36
|
+
[ctrlVersionNumber]: [null, []],
|
|
37
|
+
[ctrlConfiguredChannel]: [null, []],
|
|
38
|
+
[ctrlAppStoreVersion]: [null, []],
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
get ctrlVersionNumber() { return this.form.get(ctrlVersionNumber); }
|
|
42
|
+
get ctrlNextVersionNumber() { return this.form.get(ctrlNextVersionNumber); }
|
|
43
|
+
get ctrlConfiguredChannel() { return this.form.get(ctrlConfiguredChannel); }
|
|
44
|
+
get ctrlAppStoreVersion() { return this.form.get(ctrlAppStoreVersion); }
|
|
45
|
+
ionViewWillEnter() {
|
|
46
|
+
this.delayedPercentage = 0;
|
|
47
|
+
this.percentage = 0;
|
|
48
|
+
this.performAutomaticUpdate().then(() => { });
|
|
49
|
+
this.startLoaderSync();
|
|
50
|
+
this.changeStatus({
|
|
51
|
+
percentage: 0,
|
|
52
|
+
text: this.translateService.instant(this.textCheckingForUpdates),
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
ionViewWillLeave() {
|
|
56
|
+
this.stopLoaderSync();
|
|
57
|
+
}
|
|
58
|
+
async performAutomaticUpdate() {
|
|
59
|
+
const deviceInfo = await Device.getInfo();
|
|
60
|
+
if (deviceInfo?.platform === 'web') {
|
|
61
|
+
// Local? Skip the update page.
|
|
62
|
+
this.closeUpdateScreen();
|
|
63
|
+
}
|
|
64
|
+
try {
|
|
65
|
+
this.updateInfo();
|
|
66
|
+
// Start upgrade
|
|
67
|
+
const currentVersion = await this.deploy.getCurrentVersion();
|
|
68
|
+
if (currentVersion?.binaryVersionName) {
|
|
69
|
+
const binaryGroup = currentVersion.binaryVersionName.substring(0, 3); // e.g. "1.4"
|
|
70
|
+
const channelGroup = currentVersion.channel.split('-')[1].substring(0, 3); // e.g. "1.4"
|
|
71
|
+
const channelType = currentVersion.channel.split('-')[0];
|
|
72
|
+
if (binaryGroup != channelGroup) {
|
|
73
|
+
await this.deploy.configure({
|
|
74
|
+
appId: '18d6e5fb',
|
|
75
|
+
channel: `${channelType}-${binaryGroup}.x`
|
|
76
|
+
}).then(() => {
|
|
77
|
+
this.sync().then(() => { });
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
else {
|
|
81
|
+
this.sync().then(() => { });
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
else {
|
|
85
|
+
this.sync().then(() => { });
|
|
86
|
+
}
|
|
87
|
+
// End upgrade
|
|
88
|
+
}
|
|
89
|
+
catch (error) {
|
|
90
|
+
this.changeStatus({
|
|
91
|
+
closeScreen: true,
|
|
92
|
+
error,
|
|
93
|
+
percentage: 100,
|
|
94
|
+
text: this.translateService.instant(this.textUnexpectedError)
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
async sync() {
|
|
99
|
+
try {
|
|
100
|
+
this.updateInfo();
|
|
101
|
+
const updateAvailableInfo = await this.deploy.checkForUpdate();
|
|
102
|
+
if (!updateAvailableInfo.available) {
|
|
103
|
+
// No update available
|
|
104
|
+
this.changeStatus({
|
|
105
|
+
closeScreen: true,
|
|
106
|
+
percentage: 0,
|
|
107
|
+
text: this.translateService.instant(this.textNoUpdatesAvailable),
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
else {
|
|
111
|
+
// Download update
|
|
112
|
+
await this.deploy.sync({ updateMethod: 'auto' }, (percentage) => {
|
|
113
|
+
this.changeStatus({
|
|
114
|
+
percentage: percentage ?? 0,
|
|
115
|
+
text: this.translateService.instant(this.textDownloadingUpdate, { percentage, version: updateAvailableInfo.build }),
|
|
116
|
+
});
|
|
117
|
+
}).catch((error) => {
|
|
118
|
+
this.changeStatus({
|
|
119
|
+
closeScreen: true,
|
|
120
|
+
error,
|
|
121
|
+
percentage: 100,
|
|
122
|
+
text: this.translateService.instant(this.textErrorWhileUpdatingApp),
|
|
123
|
+
});
|
|
124
|
+
});
|
|
125
|
+
this.changeStatus({
|
|
126
|
+
closeScreen: true,
|
|
127
|
+
percentage: 100,
|
|
128
|
+
text: this.translateService.instant(this.textFinishedUpdating, { version: updateAvailableInfo.build })
|
|
129
|
+
});
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
catch (error) {
|
|
133
|
+
// Catch unexpected plug-in errors
|
|
134
|
+
this.changeStatus({
|
|
135
|
+
closeScreen: true,
|
|
136
|
+
error,
|
|
137
|
+
percentage: 100,
|
|
138
|
+
text: this.translateService.instant(this.textUnexpectedError)
|
|
139
|
+
});
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
async updateInfo() {
|
|
143
|
+
const currentVersion = await this.deploy.getCurrentVersion();
|
|
144
|
+
const configuration = await this.deploy.getConfiguration();
|
|
145
|
+
const updateAvailableInfo = await this.deploy.checkForUpdate();
|
|
146
|
+
if (currentVersion) {
|
|
147
|
+
this.ctrlVersionNumber.setValue({
|
|
148
|
+
value: configuration?.currentBuildId,
|
|
149
|
+
});
|
|
150
|
+
this.ctrlNextVersionNumber.setValue({
|
|
151
|
+
value: updateAvailableInfo?.build
|
|
152
|
+
});
|
|
153
|
+
this.ctrlConfiguredChannel.setValue({
|
|
154
|
+
value: configuration ? configuration.channel : null
|
|
155
|
+
});
|
|
156
|
+
this.ctrlAppStoreVersion.setValue({
|
|
157
|
+
value: configuration ? configuration.binaryVersionName : null
|
|
158
|
+
});
|
|
159
|
+
{
|
|
160
|
+
const scope = getCurrentScope();
|
|
161
|
+
scope.setTag('version_binary_code', currentVersion?.binaryVersionCode);
|
|
162
|
+
scope.setTag('version_binary_name', currentVersion?.binaryVersionName);
|
|
163
|
+
scope.setTag('version_build_id', currentVersion?.buildId);
|
|
164
|
+
scope.setTag('channel_type', currentVersion?.channel);
|
|
165
|
+
scope.setTag('version_snapshot_id', currentVersion?.versionId);
|
|
166
|
+
}
|
|
167
|
+
;
|
|
168
|
+
this.changeDetector.markForCheck();
|
|
169
|
+
this.applicationRef.tick();
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
changeStatus(status) {
|
|
173
|
+
this.updateStatus = status.text;
|
|
174
|
+
this.percentage = status.percentage;
|
|
175
|
+
if (status.closeScreen) {
|
|
176
|
+
this.closeUpdateScreen();
|
|
177
|
+
}
|
|
178
|
+
if (status.error) {
|
|
179
|
+
// this.appStore.dispatch(
|
|
180
|
+
// sharedToasterActions.CREATE_ERROR({
|
|
181
|
+
// messageText: status.error,
|
|
182
|
+
// })
|
|
183
|
+
// );
|
|
184
|
+
}
|
|
185
|
+
this.changeDetector.markForCheck();
|
|
186
|
+
this.applicationRef.tick();
|
|
187
|
+
}
|
|
188
|
+
closeUpdateScreen() {
|
|
189
|
+
// Allowing some time to make a screenshot of version info
|
|
190
|
+
SpxStorage.clearSetting(SpxStorageKeyEnum.updateInProgress);
|
|
191
|
+
setTimeout(() => {
|
|
192
|
+
if (SpxStorage.getSetting(SpxStorageKeyEnum.afterSignIn) &&
|
|
193
|
+
this.spxIsSignedIn) {
|
|
194
|
+
this.router.navigate([SpxStorage.getSetting(SpxStorageKeyEnum.afterSignIn)]);
|
|
195
|
+
SpxStorage.clearSetting(SpxStorageKeyEnum.afterSignIn);
|
|
196
|
+
}
|
|
197
|
+
else {
|
|
198
|
+
this.router.navigate([this.spxHomeUrl]);
|
|
199
|
+
}
|
|
200
|
+
}, 0);
|
|
201
|
+
}
|
|
202
|
+
startLoaderSync() {
|
|
203
|
+
SpxStorage.setSetting(SpxStorageKeyEnum.updateInProgress, '1');
|
|
204
|
+
if (this.syncTruckInterval === null) {
|
|
205
|
+
this.syncTruckInterval = setInterval(() => {
|
|
206
|
+
this.delayedPercentage = this.percentage;
|
|
207
|
+
}, 200);
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
stopLoaderSync() {
|
|
211
|
+
if (this.syncTruckInterval !== null) {
|
|
212
|
+
clearInterval(this.syncTruckInterval);
|
|
213
|
+
this.syncTruckInterval = null;
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.1", ngImport: i0, type: SpxButtonComponent, deps: [{ token: i1.Deploy }, { token: i2.Router }, { token: i0.ChangeDetectorRef }, { token: i0.ApplicationRef }, { token: i3.TranslateService }, { token: i4.FormBuilder }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
217
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.1.1", type: SpxButtonComponent, isStandalone: true, selector: "spx-button", inputs: { spxHomeUrl: "spxHomeUrl", spxIsSignedIn: "spxIsSignedIn", textCheckingForUpdates: "textCheckingForUpdates", textDownloadingUpdate: "textDownloadingUpdate", textErrorWhileUpdatingApp: "textErrorWhileUpdatingApp", textFinishedUpdating: "textFinishedUpdating", textNoUpdatesAvailable: "textNoUpdatesAvailable", textUnexpectedError: "textUnexpectedError", txtAppStoreVersion: "txtAppStoreVersion", txtChannel: "txtChannel", txtNextVersion: "txtNextVersion", txtUpdate: "txtUpdate", txtVersion: "txtVersion" }, ngImport: i0, template: `<ion-header>
|
|
218
|
+
<ion-toolbar>
|
|
219
|
+
<ion-title>
|
|
220
|
+
{{ txtUpdate | translate | capitalize }}
|
|
221
|
+
</ion-title>
|
|
222
|
+
</ion-toolbar>
|
|
223
|
+
</ion-header>
|
|
224
|
+
|
|
225
|
+
<ion-content class="ion-content--upd" [fullscreen]="true">
|
|
226
|
+
<div class="ion-padding">
|
|
227
|
+
<spx-progress-bar [spxPercentage]="delayedPercentage" [spxTitle]="updateStatus | capitalize">
|
|
228
|
+
</spx-progress-bar>
|
|
229
|
+
<form [formGroup]="form" class="mt-3">
|
|
230
|
+
<div *ngIf="ctrlAppStoreVersion.value && ctrlAppStoreVersion.value.value" class="grid grid-cols-1 md:grid-cols-2 xl:grid-cols-3 gap-3">
|
|
231
|
+
<spx-input [formControl]="ctrlAppStoreVersion" [spxLabel]="txtAppStoreVersion | translate | capitalize"
|
|
232
|
+
[spxReadonly]="true"></spx-input>
|
|
233
|
+
<spx-input [formControl]="ctrlConfiguredChannel" [spxLabel]="txtChannel | translate | capitalize"
|
|
234
|
+
[spxReadonly]="true"></spx-input>
|
|
235
|
+
<spx-input [formControl]="ctrlVersionNumber" [spxLabel]="txtVersion | translate | capitalize"
|
|
236
|
+
[spxReadonly]="true"></spx-input>
|
|
237
|
+
<spx-input *ngIf="ctrlNextVersionNumber.value && ctrlNextVersionNumber.value.value" [formControl]="ctrlNextVersionNumber" [spxLabel]="txtNextVersion | translate | capitalize"
|
|
238
|
+
[spxReadonly]="true"></spx-input>
|
|
239
|
+
</div>
|
|
240
|
+
</form>
|
|
241
|
+
</div>
|
|
242
|
+
</ion-content>`, isInline: true, dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i4.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "component", type: IonContent, selector: "ion-content", inputs: ["color", "fixedSlotPlacement", "forceOverscroll", "fullscreen", "scrollEvents", "scrollX", "scrollY"] }, { kind: "component", type: IonHeader, selector: "ion-header", inputs: ["collapse", "mode", "translucent"] }, { kind: "component", type: IonTitle, selector: "ion-title", inputs: ["color", "size"] }, { kind: "component", type: IonToolbar, selector: "ion-toolbar", inputs: ["color", "mode"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i4.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i4.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "pipe", type: SpxCapitalizePipe, name: "capitalize" }, { kind: "component", type: SpxInputComponent, selector: "spx-input", inputs: ["spxLabel", "spxMax", "spxMin", "spxName", "spxReadonly", "spxAutofocus", "spxInputMode", "spxPattern", "spxRequired", "spxSelectMonth", "spxSelectDay", "spxShowEdit", "spxShowHelp", "spxShowLabel", "spxCompact", "spxShowClear", "spxShowSearch", "spxShowValidationMessages", "spxStep", "spxSuggestions", "spxType", "spxValidators", "value", "spxCapitalize", "spxFocused"], outputs: ["spxBlur", "spxClear", "spxChange", "spxFocus", "spxEdit", "spxHelp", "spxSearch"] }, { kind: "component", type: SpxProgressBarComponent, selector: "spx-progress-bar", inputs: ["spxPercentage", "spxTitle"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i3.TranslatePipe, name: "translate" }] }); }
|
|
243
|
+
}
|
|
244
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.1", ngImport: i0, type: SpxButtonComponent, decorators: [{
|
|
245
|
+
type: Component,
|
|
246
|
+
args: [{
|
|
247
|
+
selector: 'spx-button',
|
|
248
|
+
standalone: true,
|
|
249
|
+
imports: [
|
|
250
|
+
FormsModule,
|
|
251
|
+
IonContent,
|
|
252
|
+
IonHeader,
|
|
253
|
+
IonTitle,
|
|
254
|
+
IonToolbar,
|
|
255
|
+
NgClass,
|
|
256
|
+
ReactiveFormsModule,
|
|
257
|
+
SpxCapitalizePipe,
|
|
258
|
+
SpxInputComponent,
|
|
259
|
+
SpxProgressBarComponent,
|
|
260
|
+
TranslateModule,
|
|
261
|
+
],
|
|
262
|
+
template: `<ion-header>
|
|
263
|
+
<ion-toolbar>
|
|
264
|
+
<ion-title>
|
|
265
|
+
{{ txtUpdate | translate | capitalize }}
|
|
266
|
+
</ion-title>
|
|
267
|
+
</ion-toolbar>
|
|
268
|
+
</ion-header>
|
|
269
|
+
|
|
270
|
+
<ion-content class="ion-content--upd" [fullscreen]="true">
|
|
271
|
+
<div class="ion-padding">
|
|
272
|
+
<spx-progress-bar [spxPercentage]="delayedPercentage" [spxTitle]="updateStatus | capitalize">
|
|
273
|
+
</spx-progress-bar>
|
|
274
|
+
<form [formGroup]="form" class="mt-3">
|
|
275
|
+
<div *ngIf="ctrlAppStoreVersion.value && ctrlAppStoreVersion.value.value" class="grid grid-cols-1 md:grid-cols-2 xl:grid-cols-3 gap-3">
|
|
276
|
+
<spx-input [formControl]="ctrlAppStoreVersion" [spxLabel]="txtAppStoreVersion | translate | capitalize"
|
|
277
|
+
[spxReadonly]="true"></spx-input>
|
|
278
|
+
<spx-input [formControl]="ctrlConfiguredChannel" [spxLabel]="txtChannel | translate | capitalize"
|
|
279
|
+
[spxReadonly]="true"></spx-input>
|
|
280
|
+
<spx-input [formControl]="ctrlVersionNumber" [spxLabel]="txtVersion | translate | capitalize"
|
|
281
|
+
[spxReadonly]="true"></spx-input>
|
|
282
|
+
<spx-input *ngIf="ctrlNextVersionNumber.value && ctrlNextVersionNumber.value.value" [formControl]="ctrlNextVersionNumber" [spxLabel]="txtNextVersion | translate | capitalize"
|
|
283
|
+
[spxReadonly]="true"></spx-input>
|
|
284
|
+
</div>
|
|
285
|
+
</form>
|
|
286
|
+
</div>
|
|
287
|
+
</ion-content>`,
|
|
288
|
+
}]
|
|
289
|
+
}], ctorParameters: () => [{ type: i1.Deploy }, { type: i2.Router }, { type: i0.ChangeDetectorRef }, { type: i0.ApplicationRef }, { type: i3.TranslateService }, { type: i4.FormBuilder }], propDecorators: { spxHomeUrl: [{
|
|
290
|
+
type: Input
|
|
291
|
+
}], spxIsSignedIn: [{
|
|
292
|
+
type: Input
|
|
293
|
+
}], textCheckingForUpdates: [{
|
|
294
|
+
type: Input
|
|
295
|
+
}], textDownloadingUpdate: [{
|
|
296
|
+
type: Input
|
|
297
|
+
}], textErrorWhileUpdatingApp: [{
|
|
298
|
+
type: Input
|
|
299
|
+
}], textFinishedUpdating: [{
|
|
300
|
+
type: Input
|
|
301
|
+
}], textNoUpdatesAvailable: [{
|
|
302
|
+
type: Input
|
|
303
|
+
}], textUnexpectedError: [{
|
|
304
|
+
type: Input
|
|
305
|
+
}], txtAppStoreVersion: [{
|
|
306
|
+
type: Input
|
|
307
|
+
}], txtChannel: [{
|
|
308
|
+
type: Input
|
|
309
|
+
}], txtNextVersion: [{
|
|
310
|
+
type: Input
|
|
311
|
+
}], txtUpdate: [{
|
|
312
|
+
type: Input
|
|
313
|
+
}], txtVersion: [{
|
|
314
|
+
type: Input
|
|
315
|
+
}] } });
|
|
316
|
+
|
|
317
|
+
/**
|
|
318
|
+
* Generated bundle index. Do not edit.
|
|
319
|
+
*/
|
|
320
|
+
|
|
321
|
+
export { SpxButtonComponent };
|
|
322
|
+
//# sourceMappingURL=softpak-components-spx-app-update.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"softpak-components-spx-app-update.mjs","sources":["../../../../projects/softpak/components/spx-app-update/spx-app-update.component.ts","../../../../projects/softpak/components/spx-app-update/softpak-components-spx-app-update.ts"],"sourcesContent":["import { NgClass } from '@angular/common';\nimport { ApplicationRef, ChangeDetectorRef, Component, Input } from '@angular/core';\nimport { FormBuilder, FormControl, FormGroup, FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { Router } from '@angular/router';\nimport { IonContent, IonHeader, IonToolbar, IonTitle } from '@ionic/angular/standalone';\nimport { TranslateModule, TranslateService } from '@ngx-translate/core';\nimport { SpxCapitalizePipe } from '@softpak/components/spx-capitalize';\nimport { SpxInputComponent } from '@softpak/components/spx-inputs';\nimport { SpxProgressBarComponent } from '@softpak/components/spx-progress-bar';\nimport { SpxStorage, SpxStorageKeyEnum } from '@softpak/components/spx-storage';\nimport { Device } from '@capacitor/device';\nimport { Deploy } from 'cordova-plugin-ionic/dist/ngx';\nimport { getCurrentScope } from '@sentry/angular';\n\nconst ctrlNextVersionNumber = 'ctrlNextVersionNumber';\nconst ctrlVersionNumber = 'ctrlVersionNumber';\nconst ctrlConfiguredChannel = 'ctrlConfiguredChannel';\nconst ctrlAppStoreVersion = 'ctrlAppStoreVersion';\n\n@Component({\n selector: 'spx-button',\n standalone: true,\n imports: [\n FormsModule,\n IonContent,\n IonHeader,\n IonTitle,\n IonToolbar,\n NgClass,\n ReactiveFormsModule,\n SpxCapitalizePipe,\n SpxInputComponent,\n SpxProgressBarComponent,\n TranslateModule,\n ],\n template: `<ion-header>\n <ion-toolbar>\n <ion-title>\n {{ txtUpdate | translate | capitalize }}\n </ion-title>\n </ion-toolbar>\n</ion-header>\n\n<ion-content class=\"ion-content--upd\" [fullscreen]=\"true\">\n <div class=\"ion-padding\">\n <spx-progress-bar [spxPercentage]=\"delayedPercentage\" [spxTitle]=\"updateStatus | capitalize\">\n </spx-progress-bar>\n <form [formGroup]=\"form\" class=\"mt-3\">\n <div *ngIf=\"ctrlAppStoreVersion.value && ctrlAppStoreVersion.value.value\" class=\"grid grid-cols-1 md:grid-cols-2 xl:grid-cols-3 gap-3\">\n <spx-input [formControl]=\"ctrlAppStoreVersion\" [spxLabel]=\"txtAppStoreVersion | translate | capitalize\"\n [spxReadonly]=\"true\"></spx-input>\n <spx-input [formControl]=\"ctrlConfiguredChannel\" [spxLabel]=\"txtChannel | translate | capitalize\"\n [spxReadonly]=\"true\"></spx-input>\n <spx-input [formControl]=\"ctrlVersionNumber\" [spxLabel]=\"txtVersion | translate | capitalize\"\n [spxReadonly]=\"true\"></spx-input>\n <spx-input *ngIf=\"ctrlNextVersionNumber.value && ctrlNextVersionNumber.value.value\" [formControl]=\"ctrlNextVersionNumber\" [spxLabel]=\"txtNextVersion | translate | capitalize\"\n [spxReadonly]=\"true\"></spx-input>\n </div>\n </form>\n </div>\n</ion-content>`,\n})\nexport class SpxButtonComponent {\n @Input() spxHomeUrl!: string;\n @Input() spxIsSignedIn!: boolean;\n @Input() textCheckingForUpdates!: string;\n @Input() textDownloadingUpdate!: string;\n @Input() textErrorWhileUpdatingApp!: string;\n @Input() textFinishedUpdating!: string;\n @Input() textNoUpdatesAvailable!: string;\n @Input() textUnexpectedError!: string;\n @Input() txtAppStoreVersion!: string;\n @Input() txtChannel!: string;\n @Input() txtNextVersion!: string;\n @Input() txtUpdate!: string;\n @Input() txtVersion!: string;\n\n form: FormGroup;\n\n delayedPercentage: number = 0;\n percentage: number = 0;\n syncTruckInterval: any | null = null;\n updateStatus: string = this.textCheckingForUpdates;\n\n constructor(\n private readonly deploy: Deploy,\n private readonly router: Router,\n private readonly changeDetector: ChangeDetectorRef,\n private readonly applicationRef: ApplicationRef,\n private readonly translateService: TranslateService,\n private readonly formBuilder: FormBuilder,\n ) {\n this.form = this.formBuilder.group({\n [ctrlNextVersionNumber]: [null, []],\n [ctrlVersionNumber]: [null, []],\n [ctrlConfiguredChannel]: [null, []],\n [ctrlAppStoreVersion]: [null, []],\n });\n }\n\n get ctrlVersionNumber(): FormControl { return this.form.get(ctrlVersionNumber) as FormControl; }\n get ctrlNextVersionNumber(): FormControl { return this.form.get(ctrlNextVersionNumber) as FormControl; }\n get ctrlConfiguredChannel(): FormControl { return this.form.get(ctrlConfiguredChannel) as FormControl; }\n get ctrlAppStoreVersion(): FormControl { return this.form.get(ctrlAppStoreVersion) as FormControl; }\n\n ionViewWillEnter() {\n this.delayedPercentage = 0;\n this.percentage = 0;\n this.performAutomaticUpdate().then(() => { });\n this.startLoaderSync();\n this.changeStatus({\n percentage: 0,\n text: this.translateService.instant(this.textCheckingForUpdates),\n });\n }\n\n ionViewWillLeave() {\n this.stopLoaderSync();\n }\n\n async performAutomaticUpdate() {\n const deviceInfo = await Device.getInfo();\n\n if (deviceInfo?.platform === 'web') {\n // Local? Skip the update page.\n this.closeUpdateScreen();\n }\n try {\n this.updateInfo();\n\n // Start upgrade\n const currentVersion = await this.deploy.getCurrentVersion();\n if (currentVersion?.binaryVersionName) {\n const binaryGroup = currentVersion.binaryVersionName.substring(0, 3); // e.g. \"1.4\"\n const channelGroup = currentVersion.channel.split('-')[1].substring(0, 3); // e.g. \"1.4\"\n const channelType = currentVersion.channel.split('-')[0];\n\n if (binaryGroup != channelGroup) {\n await this.deploy.configure({\n appId: '18d6e5fb',\n channel: `${channelType}-${binaryGroup}.x`\n }).then(() => {\n this.sync().then(() => { });\n });\n } else {\n this.sync().then(() => { });\n }\n } else {\n this.sync().then(() => { });\n }\n // End upgrade\n } catch (error: any) {\n this.changeStatus({\n closeScreen: true,\n error,\n percentage: 100,\n text: this.translateService.instant(this.textUnexpectedError)\n });\n }\n }\n\n private async sync() {\n try {\n this.updateInfo();\n\n const updateAvailableInfo = await this.deploy.checkForUpdate();\n if (!updateAvailableInfo.available) {\n // No update available\n this.changeStatus({\n closeScreen: true,\n percentage: 0,\n text: this.translateService.instant(this.textNoUpdatesAvailable),\n });\n } else {\n // Download update\n await this.deploy.sync({ updateMethod: 'auto' }, (percentage) => {\n this.changeStatus({\n percentage: percentage ?? 0,\n text: this.translateService.instant(this.textDownloadingUpdate, { percentage, version: updateAvailableInfo.build }),\n });\n }).catch((error) => {\n this.changeStatus({\n closeScreen: true,\n error,\n percentage: 100,\n text: this.translateService.instant(this.textErrorWhileUpdatingApp),\n });\n });\n\n this.changeStatus({\n closeScreen: true,\n percentage: 100,\n text: this.translateService.instant(this.textFinishedUpdating, { version: updateAvailableInfo.build })\n });\n }\n } catch (error: any) {\n // Catch unexpected plug-in errors\n this.changeStatus({\n closeScreen: true,\n error,\n percentage: 100,\n text: this.translateService.instant(this.textUnexpectedError)\n });\n }\n }\n\n private async updateInfo(): Promise<void> {\n const currentVersion = await this.deploy.getCurrentVersion();\n const configuration = await this.deploy.getConfiguration();\n const updateAvailableInfo = await this.deploy.checkForUpdate();\n\n if (currentVersion) {\n this.ctrlVersionNumber.setValue({\n value: configuration?.currentBuildId,\n });\n this.ctrlNextVersionNumber.setValue({\n value: updateAvailableInfo?.build\n });\n this.ctrlConfiguredChannel.setValue({\n value: configuration ? configuration.channel : null\n });\n this.ctrlAppStoreVersion.setValue({\n value: configuration ? configuration.binaryVersionName : null\n });\n\n {\n const scope = getCurrentScope();\n scope.setTag('version_binary_code', currentVersion?.binaryVersionCode);\n scope.setTag('version_binary_name', currentVersion?.binaryVersionName);\n scope.setTag('version_build_id', currentVersion?.buildId);\n scope.setTag('channel_type', currentVersion?.channel);\n scope.setTag('version_snapshot_id', currentVersion?.versionId);\n };\n\n this.changeDetector.markForCheck();\n this.applicationRef.tick();\n }\n }\n\n private changeStatus(status: {\n error?: string;\n text: string;\n closeScreen?: boolean;\n percentage: number;\n }) {\n this.updateStatus = status.text;\n this.percentage = status.percentage;\n if (status.closeScreen) {\n this.closeUpdateScreen();\n }\n if (status.error) {\n // this.appStore.dispatch(\n // sharedToasterActions.CREATE_ERROR({\n // messageText: status.error,\n // })\n // );\n }\n this.changeDetector.markForCheck();\n this.applicationRef.tick();\n }\n\n private closeUpdateScreen() {\n // Allowing some time to make a screenshot of version info\n SpxStorage.clearSetting<any>(SpxStorageKeyEnum.updateInProgress);\n setTimeout(() => {\n if (\n SpxStorage.getSetting<any>(SpxStorageKeyEnum.afterSignIn) &&\n this.spxIsSignedIn\n ) {\n this.router.navigate([SpxStorage.getSetting<any>(SpxStorageKeyEnum.afterSignIn)]);\n SpxStorage.clearSetting<any>(SpxStorageKeyEnum.afterSignIn)\n } else {\n this.router.navigate([this.spxHomeUrl]);\n }\n }, 0);\n }\n\n private startLoaderSync() {\n SpxStorage.setSetting<any>(SpxStorageKeyEnum.updateInProgress, '1');\n if (this.syncTruckInterval === null) {\n this.syncTruckInterval = setInterval(() => {\n this.delayedPercentage = this.percentage;\n }, 200);\n }\n }\n\n private stopLoaderSync() {\n if (this.syncTruckInterval !== null) {\n clearInterval(this.syncTruckInterval);\n this.syncTruckInterval = null;\n }\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@softpak/components",
|
|
3
|
-
"version": "0.1.0-beta.
|
|
3
|
+
"version": "0.1.0-beta.3",
|
|
4
4
|
"private": false,
|
|
5
5
|
"peerDependencies": {
|
|
6
6
|
"@angular/common": "18.x.x",
|
|
@@ -34,18 +34,24 @@
|
|
|
34
34
|
"esm": "./esm2022/spx-alert/softpak-components-spx-alert.mjs",
|
|
35
35
|
"default": "./fesm2022/softpak-components-spx-alert.mjs"
|
|
36
36
|
},
|
|
37
|
-
"./spx-app-configuration": {
|
|
38
|
-
"types": "./spx-app-configuration/index.d.ts",
|
|
39
|
-
"esm2022": "./esm2022/spx-app-configuration/softpak-components-spx-app-configuration.mjs",
|
|
40
|
-
"esm": "./esm2022/spx-app-configuration/softpak-components-spx-app-configuration.mjs",
|
|
41
|
-
"default": "./fesm2022/softpak-components-spx-app-configuration.mjs"
|
|
42
|
-
},
|
|
43
37
|
"./spx-app-expiry": {
|
|
44
38
|
"types": "./spx-app-expiry/index.d.ts",
|
|
45
39
|
"esm2022": "./esm2022/spx-app-expiry/softpak-components-spx-app-expiry.mjs",
|
|
46
40
|
"esm": "./esm2022/spx-app-expiry/softpak-components-spx-app-expiry.mjs",
|
|
47
41
|
"default": "./fesm2022/softpak-components-spx-app-expiry.mjs"
|
|
48
42
|
},
|
|
43
|
+
"./spx-app-update": {
|
|
44
|
+
"types": "./spx-app-update/index.d.ts",
|
|
45
|
+
"esm2022": "./esm2022/spx-app-update/softpak-components-spx-app-update.mjs",
|
|
46
|
+
"esm": "./esm2022/spx-app-update/softpak-components-spx-app-update.mjs",
|
|
47
|
+
"default": "./fesm2022/softpak-components-spx-app-update.mjs"
|
|
48
|
+
},
|
|
49
|
+
"./spx-app-configuration": {
|
|
50
|
+
"types": "./spx-app-configuration/index.d.ts",
|
|
51
|
+
"esm2022": "./esm2022/spx-app-configuration/softpak-components-spx-app-configuration.mjs",
|
|
52
|
+
"esm": "./esm2022/spx-app-configuration/softpak-components-spx-app-configuration.mjs",
|
|
53
|
+
"default": "./fesm2022/softpak-components-spx-app-configuration.mjs"
|
|
54
|
+
},
|
|
49
55
|
"./spx-button": {
|
|
50
56
|
"types": "./spx-button/index.d.ts",
|
|
51
57
|
"esm2022": "./esm2022/spx-button/softpak-components-spx-button.mjs",
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './spx-app-update.component';
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { ApplicationRef, ChangeDetectorRef } from '@angular/core';
|
|
2
|
+
import { FormBuilder, FormControl, FormGroup } from '@angular/forms';
|
|
3
|
+
import { Router } from '@angular/router';
|
|
4
|
+
import { TranslateService } from '@ngx-translate/core';
|
|
5
|
+
import { Deploy } from 'cordova-plugin-ionic/dist/ngx';
|
|
6
|
+
import * as i0 from "@angular/core";
|
|
7
|
+
export declare class SpxButtonComponent {
|
|
8
|
+
private readonly deploy;
|
|
9
|
+
private readonly router;
|
|
10
|
+
private readonly changeDetector;
|
|
11
|
+
private readonly applicationRef;
|
|
12
|
+
private readonly translateService;
|
|
13
|
+
private readonly formBuilder;
|
|
14
|
+
spxHomeUrl: string;
|
|
15
|
+
spxIsSignedIn: boolean;
|
|
16
|
+
textCheckingForUpdates: string;
|
|
17
|
+
textDownloadingUpdate: string;
|
|
18
|
+
textErrorWhileUpdatingApp: string;
|
|
19
|
+
textFinishedUpdating: string;
|
|
20
|
+
textNoUpdatesAvailable: string;
|
|
21
|
+
textUnexpectedError: string;
|
|
22
|
+
txtAppStoreVersion: string;
|
|
23
|
+
txtChannel: string;
|
|
24
|
+
txtNextVersion: string;
|
|
25
|
+
txtUpdate: string;
|
|
26
|
+
txtVersion: string;
|
|
27
|
+
form: FormGroup;
|
|
28
|
+
delayedPercentage: number;
|
|
29
|
+
percentage: number;
|
|
30
|
+
syncTruckInterval: any | null;
|
|
31
|
+
updateStatus: string;
|
|
32
|
+
constructor(deploy: Deploy, router: Router, changeDetector: ChangeDetectorRef, applicationRef: ApplicationRef, translateService: TranslateService, formBuilder: FormBuilder);
|
|
33
|
+
get ctrlVersionNumber(): FormControl;
|
|
34
|
+
get ctrlNextVersionNumber(): FormControl;
|
|
35
|
+
get ctrlConfiguredChannel(): FormControl;
|
|
36
|
+
get ctrlAppStoreVersion(): FormControl;
|
|
37
|
+
ionViewWillEnter(): void;
|
|
38
|
+
ionViewWillLeave(): void;
|
|
39
|
+
performAutomaticUpdate(): Promise<void>;
|
|
40
|
+
private sync;
|
|
41
|
+
private updateInfo;
|
|
42
|
+
private changeStatus;
|
|
43
|
+
private closeUpdateScreen;
|
|
44
|
+
private startLoaderSync;
|
|
45
|
+
private stopLoaderSync;
|
|
46
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<SpxButtonComponent, never>;
|
|
47
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<SpxButtonComponent, "spx-button", never, { "spxHomeUrl": { "alias": "spxHomeUrl"; "required": false; }; "spxIsSignedIn": { "alias": "spxIsSignedIn"; "required": false; }; "textCheckingForUpdates": { "alias": "textCheckingForUpdates"; "required": false; }; "textDownloadingUpdate": { "alias": "textDownloadingUpdate"; "required": false; }; "textErrorWhileUpdatingApp": { "alias": "textErrorWhileUpdatingApp"; "required": false; }; "textFinishedUpdating": { "alias": "textFinishedUpdating"; "required": false; }; "textNoUpdatesAvailable": { "alias": "textNoUpdatesAvailable"; "required": false; }; "textUnexpectedError": { "alias": "textUnexpectedError"; "required": false; }; "txtAppStoreVersion": { "alias": "txtAppStoreVersion"; "required": false; }; "txtChannel": { "alias": "txtChannel"; "required": false; }; "txtNextVersion": { "alias": "txtNextVersion"; "required": false; }; "txtUpdate": { "alias": "txtUpdate"; "required": false; }; "txtVersion": { "alias": "txtVersion"; "required": false; }; }, {}, never, never, true, never>;
|
|
48
|
+
}
|