@shopgate/pwa-common-commerce
Version:
Commerce library for the Shopgate Connect PWA.
80 lines (74 loc) • 2.22 kB
JavaScript
import Scanner from '@shopgate/pwa-core/classes/Scanner';
import ScannerEventListener from '@shopgate/pwa-core/classes/ScannerEventListener';
import { SCANNER_SCOPE_DEFAULT } from '@shopgate/pwa-core/constants/Scanner';
import { appDidStart$ } from '@shopgate/pwa-common/streams';
import scannerFinished from "../action-creators/scannerFinished";
import handleBarCode from "../actions/handleBarCode";
import handleQrCode from "../actions/handleQrCode";
import { SCANNER_FORMATS_BARCODE, SCANNER_FORMATS_QR_CODE } from "../constants";
import { startScanner$, scannerFinishedBarCode$, scannerFinishedQrCode$ } from "../streams";
// Scanner payload formats which are handled by the subscriptions.
export const handledFormats = [].concat(SCANNER_FORMATS_BARCODE, SCANNER_FORMATS_QR_CODE);
/**
* Scanner subscriptions.
* @param {Function} subscribe The subscribe function.
*/
export default subscribe => {
// Register global listener to convert to stream
subscribe(appDidStart$, ({
dispatch
}) => {
Scanner.addListener(new ScannerEventListener('Scanner listener', null, null, handledFormats).setHandler(({
scope,
payload: {
format,
code: payload
} = {}
}) => {
dispatch(scannerFinished(scope, format, payload));
}));
});
subscribe(startScanner$, () => {
Scanner.start();
});
// Default scope stream
const scannerFinishedBarCodeDefault$ = scannerFinishedBarCode$.filter(({
action
}) => action.scope === SCANNER_SCOPE_DEFAULT);
// Default scope bar code handler
subscribe(scannerFinishedBarCodeDefault$, ({
dispatch,
action
}) => {
const {
scope,
format,
payload
} = action;
dispatch(handleBarCode({
scope,
format,
payload
}));
});
// Default scope qr code stream
const scannerFinishedQrCodeDefault$ = scannerFinishedQrCode$.filter(({
action
}) => action.scope === SCANNER_SCOPE_DEFAULT);
// Default scope qr code handler
subscribe(scannerFinishedQrCodeDefault$, ({
dispatch,
action
}) => {
const {
scope,
format,
payload
} = action;
dispatch(handleQrCode({
scope,
format,
payload
}));
});
};