diff --git a/src/app/beans/bean-internal-share-code-generator/bean-internal-share-code-generator.component.html b/src/app/beans/bean-internal-share-code-generator/bean-internal-share-code-generator.component.html
index 74797bd9..e57f51bf 100644
--- a/src/app/beans/bean-internal-share-code-generator/bean-internal-share-code-generator.component.html
+++ b/src/app/beans/bean-internal-share-code-generator/bean-internal-share-code-generator.component.html
@@ -9,6 +9,7 @@
{{"BEAN_CODE_ACTION.START_BREW_CHOOSE_PREPARATION" | translate}}
{{"BEAN_CODE_ACTION.DETAIL" | translate}}
{{"BEAN_CODE_ACTION.EDIT" | translate}}
+ {{"BEAN_CODE_ACTION.CHOOSE_ACTION" | translate}}
diff --git a/src/assets/i18n/en.json b/src/assets/i18n/en.json
index 951709b5..a62669c1 100644
--- a/src/assets/i18n/en.json
+++ b/src/assets/i18n/en.json
@@ -1383,7 +1383,8 @@
"START_BREW": "Start brew",
"START_BREW_CHOOSE_PREPARATION": "Start brew and choose preparation method",
"DETAIL": "Detail view",
- "EDIT": "Edit bean"
+ "EDIT": "Edit bean",
+ "CHOOSE_ACTION": "Choose action on scan"
},
"DOWNLOAD_QR_CODE": "Download QR code",
"NFC": {
@@ -1420,5 +1421,6 @@
"SMART_SCALE_ACAIA_CONNECTION_MODE_V1": "V1 - Old connection mode",
"BEAN_DATA_CO2E_KG": "CO2e (kg) per kg roasted coffee",
"BEAN_DATA_CO2E_KG_TOOLTIP": "The released CO2e (kg) released per kg roasted coffee",
- "BEAN_SORT_RECENTLY_USED": "Last used"
+ "BEAN_SORT_RECENTLY_USED": "Last used",
+ "BEAN_CODE_ON_ACTION_SCANNED_TITLE": "Choose action"
}
diff --git a/src/enums/beans/beanCodeAction.ts b/src/enums/beans/beanCodeAction.ts
index 8fcd683c..8fda0f27 100755
--- a/src/enums/beans/beanCodeAction.ts
+++ b/src/enums/beans/beanCodeAction.ts
@@ -3,4 +3,5 @@ export enum BEAN_CODE_ACTION {
START_BREW_CHOOSE_PREPARATION = 'START_BREW_CHOOSE_PREPARATION',
DETAIL = 'DETAIL',
EDIT = 'EDIT',
+ CHOOSE_ACTION = 'CHOOSE_ACTION',
}
diff --git a/src/services/intentHandler/intent-handler.service.ts b/src/services/intentHandler/intent-handler.service.ts
index 0b5be629..401c9df3 100644
--- a/src/services/intentHandler/intent-handler.service.ts
+++ b/src/services/intentHandler/intent-handler.service.ts
@@ -143,7 +143,7 @@ export class IntentHandlerService {
const data = url.split('int/')[1].split('/');
const actionType = data[0];
const id = data[1];
- const action = data[2];
+ let action = data[2];
try {
this.uiAnalytics.trackEvent(
IntentHandlerTracking.TITLE,
@@ -152,6 +152,13 @@ export class IntentHandlerService {
);
} catch (ex) {}
if (actionType === 'bean') {
+ if (
+ (action as BEAN_CODE_ACTION) === BEAN_CODE_ACTION.CHOOSE_ACTION
+ ) {
+ //We overwrite action here :)
+ action = await this.uiBeanHelper.chooseNFCTagAction();
+ }
+
if ((action as BEAN_CODE_ACTION) === BEAN_CODE_ACTION.DETAIL) {
await this.uiBeanHelper.detailBeanByInternalShareCode(id);
} else if (
diff --git a/src/services/uiBeanHelper.ts b/src/services/uiBeanHelper.ts
index ecb1c5dd..6ab712eb 100644
--- a/src/services/uiBeanHelper.ts
+++ b/src/services/uiBeanHelper.ts
@@ -8,7 +8,11 @@ import { Bean } from '../classes/bean/bean';
import BEAN_TRACKING from '../data/tracking/beanTracking';
import { BeansAddComponent } from '../app/beans/beans-add/beans-add.component';
import { UIAnalytics } from './uiAnalytics';
-import { ModalController, Platform } from '@ionic/angular';
+import {
+ ActionSheetController,
+ ModalController,
+ Platform,
+} from '@ionic/angular';
import { BeanArchivePopoverComponent } from '../app/beans/bean-archive-popover/bean-archive-popover.component';
import { BeansEditComponent } from '../app/beans/beans-edit/beans-edit.component';
import { BeansDetailComponent } from '../app/beans/beans-detail/beans-detail.component';
@@ -31,6 +35,8 @@ import { BeanPopoverFreezeComponent } from '../app/beans/bean-popover-freeze/bea
import { BeanPopoverListComponent } from '../app/beans/bean-popover-list/bean-popover-list.component';
import { BeanInternalShareCodeGeneratorComponent } from '../app/beans/bean-internal-share-code-generator/bean-internal-share-code-generator.component';
+import { BEAN_CODE_ACTION } from '../enums/beans/beanCodeAction';
+import { TranslateService } from '@ngx-translate/core';
/**
* Handles every helping functionalities
@@ -52,7 +58,9 @@ export class UIBeanHelper {
private readonly uiAlert: UIAlert,
private readonly uiToast: UIToast,
private readonly uiSettingsStorage: UISettingsStorage,
- private readonly uiHelper: UIHelper
+ private readonly uiHelper: UIHelper,
+ private readonly actionSheetCtrl: ActionSheetController,
+ private readonly translate: TranslateService,
) {
this.uiBrewStorage.attachOnEvent().subscribe((_val) => {
// If an brew is deleted, we need to reset our array for the next call.
@@ -109,7 +117,8 @@ export class UIBeanHelper {
const roastedBeans = this.allStoredBeans.filter(
(e) =>
- e.bean_roast_information && e.bean_roast_information.bean_uuid === _uuid
+ e.bean_roast_information &&
+ e.bean_roast_information.bean_uuid === _uuid,
);
return roastedBeans;
}
@@ -123,7 +132,7 @@ export class UIBeanHelper {
const roastedBeans = this.allStoredBeans.filter(
(e) =>
e.bean_roast_information &&
- e.bean_roast_information.roaster_machine === _uuid
+ e.bean_roast_information.roaster_machine === _uuid,
);
return roastedBeans;
}
@@ -145,7 +154,7 @@ export class UIBeanHelper {
if (_scannedQRBean.error === null) {
this.uiAnalytics.trackEvent(
QR_TRACKING.TITLE,
- QR_TRACKING.ACTIONS.SCAN_SUCCESSFULLY
+ QR_TRACKING.ACTIONS.SCAN_SUCCESSFULLY,
);
this.uiToast.showInfoToast('QR.BEAN_SUCCESSFULLY_SCANNED');
await this.uiAlert.showLoadingSpinner();
@@ -169,13 +178,13 @@ export class UIBeanHelper {
'QR.SERVER.ERROR_OCCURED',
'ERROR_OCCURED',
undefined,
- true
+ true,
);
}
} else {
this.uiAnalytics.trackEvent(
QR_TRACKING.TITLE,
- QR_TRACKING.ACTIONS.SCAN_FAILED
+ QR_TRACKING.ACTIONS.SCAN_FAILED,
);
await this.uiAlert.hideLoadingSpinner();
if (_scannedQRBean.error.errorCode === 'beannotapproved') {
@@ -183,14 +192,14 @@ export class UIBeanHelper {
'QR.SERVER.BEAN_NOT_APPROVED',
'ERROR_OCCURED',
undefined,
- true
+ true,
);
} else {
this.uiAlert.showMessage(
'QR.SERVER.ERROR_OCCURED',
'ERROR_OCCURED',
undefined,
- true
+ true,
);
}
}
@@ -311,7 +320,7 @@ export class UIBeanHelper {
'USER_BEAN_SHARINGSHARING_ERROR',
'ERROR_OCCURED',
undefined,
- true
+ true,
);
}
} catch (ex) {
@@ -353,7 +362,7 @@ export class UIBeanHelper {
private findBeanByInternalShareCode(internalShareCode: string) {
const allEntries = this.uiBeanStorage.getAllEntries();
const bean = allEntries.find(
- (b) => b.internal_share_code === internalShareCode
+ (b) => b.internal_share_code === internalShareCode,
);
return bean;
}
@@ -363,6 +372,48 @@ export class UIBeanHelper {
await this.detailBean(bean);
}
}
+
+ public async chooseNFCTagAction() {
+ const actionSheet = await this.actionSheetCtrl.create({
+ header: this.translate.instant('BEAN_CODE_ON_ACTION_SCANNED_TITLE'),
+ buttons: [
+ {
+ text: this.translate.instant('BEAN_CODE_ACTION.START_BREW'),
+ data: {
+ action: BEAN_CODE_ACTION.DETAIL,
+ },
+ },
+ {
+ text: this.translate.instant(
+ 'BEAN_CODE_ACTION.START_BREW_CHOOSE_PREPARATION',
+ ),
+ data: {
+ action: BEAN_CODE_ACTION.START_BREW_CHOOSE_PREPARATION,
+ },
+ },
+ {
+ text: this.translate.instant('BEAN_CODE_ACTION.DETAIL'),
+ data: {
+ action: BEAN_CODE_ACTION.DETAIL,
+ },
+ },
+ {
+ text: this.translate.instant('BEAN_CODE_ACTION.EDIT'),
+ data: {
+ action: BEAN_CODE_ACTION.EDIT,
+ },
+ },
+ ],
+ });
+
+ await actionSheet.present();
+
+ const data = await actionSheet.onWillDismiss();
+ if (data && data.data !== undefined) {
+ return data.data.action;
+ }
+ return undefined;
+ }
public async editBeanByInternalShareCode(internalShareCode: string) {
const bean = this.findBeanByInternalShareCode(internalShareCode);
if (bean) {
@@ -383,7 +434,7 @@ export class UIBeanHelper {
public async archiveBeanWithRatingQuestion(_bean: Bean) {
this.uiAnalytics.trackEvent(
BEAN_TRACKING.TITLE,
- BEAN_TRACKING.ACTIONS.ARCHIVE
+ BEAN_TRACKING.ACTIONS.ARCHIVE,
);
const modal = await this.modalController.create({