@open-tender/store 0.7.5 → 0.7.7

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/dist/.DS_Store CHANGED
Binary file
@@ -1,9 +1,11 @@
1
1
  import { Arrivals, CashEvent, CashSummary, Config, CustomerCheckout, CustomerIdentifier, DeviceRead, Discount, Discounts, Employee, Employees, PosSettingType, ErrorAlert, ErrorAlerts, FetchOrdersAPIArgs, GiftCardBalance, GiftCardCredit, InternalSettings, ItemTypes, KioskConfig, LevelUp, Menu, MenuColors, MenuPages, OfflineAuths, OfflineAuthsResult, Order, OrderCreate, Orders, OrderTender, OrderType, OrderUpdate, Punch, Refund, RequestedAt, RevenueCenter, SelectOptions, ServiceType, Settings, Store, Surcharges, Taxes, Tender, TicketStatusUpdate, TicketsUpdate, TicketUpdate } from '../types';
2
2
  interface ConfigAPI {
3
3
  apiUrl: string;
4
+ terminalId?: number;
4
5
  }
5
6
  declare class PosAPI {
6
7
  apiUrl: string;
8
+ terminalId?: number;
7
9
  constructor(config: ConfigAPI);
8
10
  request: <T>(endpoint: string, method?: string, data?: any) => Promise<T>;
9
11
  post(endpoint: string, data: Record<string, unknown>): Promise<Record<string, unknown>>;
@@ -36,6 +36,21 @@ var handleError = function (status, parsed) {
36
36
  return parsed;
37
37
  }
38
38
  };
39
+ var makeHeaders = function (terminalId) {
40
+ var headers = undefined;
41
+ if (terminalId) {
42
+ headers = {
43
+ 'Content-Type': 'application/json',
44
+ 'pos-terminal-id': "".concat(terminalId)
45
+ };
46
+ }
47
+ else {
48
+ headers = {
49
+ 'Content-Type': 'application/json'
50
+ };
51
+ }
52
+ return headers;
53
+ };
39
54
  var PosAPI = /** @class */ (function () {
40
55
  function PosAPI(config) {
41
56
  var _this = this;
@@ -53,9 +68,7 @@ var PosAPI = /** @class */ (function () {
53
68
  url = "".concat(this.apiUrl).concat(endpoint);
54
69
  return [4 /*yield*/, fetch(url, {
55
70
  method: method,
56
- headers: {
57
- 'Content-Type': 'application/json'
58
- },
71
+ headers: makeHeaders(this.terminalId),
59
72
  body: data ? JSON.stringify(data) : null
60
73
  })];
61
74
  case 1:
@@ -85,6 +98,7 @@ var PosAPI = /** @class */ (function () {
85
98
  });
86
99
  }); };
87
100
  this.apiUrl = config.apiUrl;
101
+ this.terminalId = config.terminalId;
88
102
  }
89
103
  PosAPI.prototype.post = function (endpoint, data) {
90
104
  return this.request("/".concat(endpoint), 'POST', data);
@@ -36,54 +36,54 @@ exports.fetchConfig = (0, toolkit_1.createAsyncThunk)(ConfigActionType.FetchConf
36
36
  var apiUrl = _a.apiUrl;
37
37
  var dispatch = _b.dispatch, getState = _b.getState, rejectWithValue = _b.rejectWithValue;
38
38
  return tslib_1.__awaiter(void 0, void 0, void 0, function () {
39
- var app, api, _c, _d,
39
+ var terminalId, app, api, _c, _d,
40
40
  // config,
41
- devicesList, _e, stores, _f, selectOptions, _g, itemTypes, store, devices, err, cashier, employee, tz, businessDate, err_1, menuColors, err_2;
42
- return tslib_1.__generator(this, function (_h) {
43
- switch (_h.label) {
41
+ devicesList, _e, stores, _f, selectOptions, _g, itemTypes, _h, menuColors, store, devices, err, cashier, employee, tz, businessDate, err_1, err_2;
42
+ return tslib_1.__generator(this, function (_j) {
43
+ switch (_j.label) {
44
44
  case 0:
45
- _h.trys.push([0, 6, , 7]);
46
- app = { apiUrl: apiUrl };
45
+ _j.trys.push([0, 6, , 7]);
46
+ terminalId = getState().pos.terminalId;
47
+ app = terminalId ? { apiUrl: apiUrl, terminalId: terminalId } : { apiUrl: apiUrl };
47
48
  api = new services_1.PosAPI(app);
48
49
  return [4 /*yield*/, Promise.all([
49
50
  // api.getConfig(),
50
51
  api.getSettings('DEVICES'),
51
52
  api.getSettings('STORE'),
52
53
  api.getSettings('SELECT_OPTION'),
53
- api.getSettings('ITEM_TYPE')
54
- // api.getMenuColors(),
54
+ api.getSettings('ITEM_TYPE'),
55
+ api.getSettings('ITEM_COLORS')
55
56
  ])];
56
57
  case 1:
57
- _c = _h.sent(), _d = _c[0], devicesList = _d === void 0 ? null : _d, _e = _c[1], stores = _e === void 0 ? null : _e, _f = _c[2], selectOptions = _f === void 0 ? null : _f, _g = _c[3], itemTypes = _g === void 0 ? null : _g;
58
- store = stores ? stores[0] : null;
59
- devices = devicesList ? devicesList[0] : null;
58
+ _c = _j.sent(), _d = _c[0], devicesList = _d === void 0 ? [] : _d, _e = _c[1], stores = _e === void 0 ? [] : _e, _f = _c[2], selectOptions = _f === void 0 ? [] : _f, _g = _c[3], itemTypes = _g === void 0 ? [] : _g, _h = _c[4], menuColors = _h === void 0 ? [] : _h;
59
+ store = stores[0] || null;
60
+ devices = devicesList[0] || null;
60
61
  if (!store || !devices) {
61
62
  err = errors_1.errorsApi.internalServerError;
62
63
  return [2 /*return*/, rejectWithValue(err)];
63
64
  }
64
65
  cashier = getState().pos.cashier;
65
66
  if (!!cashier) return [3 /*break*/, 5];
66
- _h.label = 2;
67
+ _j.label = 2;
67
68
  case 2:
68
- _h.trys.push([2, 4, , 5]);
69
+ _j.trys.push([2, 4, , 5]);
69
70
  return [4 /*yield*/, api.getCashier()
70
71
  // TODO: figure out how to get the timezone from BE
71
72
  // const tz = timezoneMap[store.timezone]
72
73
  ];
73
74
  case 3:
74
- employee = _h.sent();
75
+ employee = _j.sent();
75
76
  tz = (0, utils_1.getUserTimezone)();
76
77
  businessDate = (0, utils_1.currentLocalDateStr)(tz);
77
78
  dispatch((0, pos_1.setCashier)(tslib_1.__assign(tslib_1.__assign({}, employee), { businessDate: businessDate })));
78
79
  return [3 /*break*/, 5];
79
80
  case 4:
80
- err_1 = _h.sent();
81
+ err_1 = _j.sent();
81
82
  return [3 /*break*/, 5];
82
83
  case 5:
83
84
  dispatch((0, order_1.setRevenueCenterId)(store.revenue_center_id));
84
85
  dispatch((0, kds_1.setKdsItemTypes)(itemTypes));
85
86
  dispatch((0, kds_1.setKdsPrepStations)(devices.prep_stations));
86
- menuColors = [];
87
87
  return [2 /*return*/, {
88
88
  api: api,
89
89
  app: app,
@@ -100,7 +100,7 @@ exports.fetchConfig = (0, toolkit_1.createAsyncThunk)(ConfigActionType.FetchConf
100
100
  retries: 0
101
101
  }];
102
102
  case 6:
103
- err_2 = _h.sent();
103
+ err_2 = _j.sent();
104
104
  return [2 /*return*/, rejectWithValue(err_2)];
105
105
  case 7: return [2 /*return*/];
106
106
  }
@@ -123,6 +123,9 @@ var configSlice = (0, toolkit_1.createSlice)({
123
123
  },
124
124
  setApi: function (state, action) {
125
125
  state.api = action.payload;
126
+ },
127
+ setApiTerminal: function (state, action) {
128
+ state.api = new services_1.PosAPI(action.payload);
126
129
  }
127
130
  },
128
131
  extraReducers: function (builder) {
@@ -22,7 +22,7 @@ exports.fetchMenuPages = (0, toolkit_1.createAsyncThunk)(MenuPagesActionType.Fet
22
22
  case 0:
23
23
  _b.trys.push([0, 2, , 3]);
24
24
  api = getState().config.api;
25
- return [4 /*yield*/, api.getMenuPages()];
25
+ return [4 /*yield*/, api.getSettings('POS_PAGE')];
26
26
  case 1: return [2 /*return*/, _b.sent()];
27
27
  case 2:
28
28
  err_1 = _b.sent();
@@ -1,13 +1,14 @@
1
- import { OrderType } from '../global';
1
+ import { FullOrderType } from '../global';
2
2
  export interface MenuSection {
3
3
  name: string;
4
+ pos_page_id: number;
4
5
  pos_section_id: number;
5
6
  position: number;
6
7
  }
7
8
  export type MenuSections = Array<MenuSection>;
8
9
  export interface MenuPage {
9
10
  name: string;
10
- order_type: OrderType;
11
+ order_type: FullOrderType;
11
12
  pos_page_id: number;
12
13
  position: number;
13
14
  sections: MenuSections;
@@ -17,4 +18,4 @@ export interface MenuColor {
17
18
  id: number;
18
19
  color: string;
19
20
  }
20
- export type MenuColors = Array<MenuColor>;
21
+ export type MenuColors = MenuColor[];
@@ -30,7 +30,7 @@ export type ReceiptType = 'SALE' | 'REFUND';
30
30
  export type ChannelType = 'POS' | 'ONLINE' | 'APP' | 'PHONE' | 'KIOSK' | 'PORTAL';
31
31
  export type OrderStatus = 'OPEN' | 'HELD' | 'CLOSED' | 'VOID';
32
32
  export type TenderStatus = 'AUTHORIZED' | 'PAID' | 'REFUNDED' | 'VOID' | 'FAILED';
33
- export type PosSettingType = 'TIME_PUNCH' | 'CASH_EVENT' | 'ORDER' | 'DEPARTMENT' | 'DEVICES' | 'DISCOUNT' | 'EMPLOYEE' | 'HOUSE_ACCOUNT' | 'LOCATION' | 'MENU' | 'MENU_PAGE' | 'SELECT_OPTION' | 'SURCHARGE' | 'TAX' | 'STORE' | 'REVENUE_CENTER' | 'ITEM_TYPE' | 'QRCODE' | 'KIOSK_CONFIG';
33
+ export type PosSettingType = 'DEVICES' | 'STORE' | 'POS_MESSAGE' | 'LEVELUP' | 'DISCOUNT' | 'EMPLOYEE' | 'QRCODE' | 'HOUSE_ACCOUNT' | 'TAX' | 'SURCHARGE' | 'POS_PAGE' | 'MENU' | 'ITEM_TYPE' | 'SELECT_OPTION' | 'KIOSK_CONFIG' | 'ITEM_COLORS';
34
34
  export interface PicklistOption {
35
35
  name: string;
36
36
  value: string | number;
@@ -5,6 +5,7 @@ export declare const flattenItems: (categories: MenuCategories) => import("../ty
5
5
  export declare const makeMenuSections: (sections: MenuSections, categories: MenuCategories) => {
6
6
  items: import("../types").MenuItem[];
7
7
  name: string;
8
+ pos_page_id: number;
8
9
  pos_section_id: number;
9
10
  position: number;
10
11
  }[];
@@ -1,9 +1,11 @@
1
1
  import { Arrivals, CashEvent, CashSummary, Config, CustomerCheckout, CustomerIdentifier, DeviceRead, Discount, Discounts, Employee, Employees, PosSettingType, ErrorAlert, ErrorAlerts, FetchOrdersAPIArgs, GiftCardBalance, GiftCardCredit, InternalSettings, ItemTypes, KioskConfig, LevelUp, Menu, MenuColors, MenuPages, OfflineAuths, OfflineAuthsResult, Order, OrderCreate, Orders, OrderTender, OrderType, OrderUpdate, Punch, Refund, RequestedAt, RevenueCenter, SelectOptions, ServiceType, Settings, Store, Surcharges, Taxes, Tender, TicketStatusUpdate, TicketsUpdate, TicketUpdate } from '../types';
2
2
  interface ConfigAPI {
3
3
  apiUrl: string;
4
+ terminalId?: number;
4
5
  }
5
6
  declare class PosAPI {
6
7
  apiUrl: string;
8
+ terminalId?: number;
7
9
  constructor(config: ConfigAPI);
8
10
  request: <T>(endpoint: string, method?: string, data?: any) => Promise<T>;
9
11
  post(endpoint: string, data: Record<string, unknown>): Promise<Record<string, unknown>>;
@@ -34,6 +34,21 @@ var handleError = function (status, parsed) {
34
34
  return parsed;
35
35
  }
36
36
  };
37
+ var makeHeaders = function (terminalId) {
38
+ var headers = undefined;
39
+ if (terminalId) {
40
+ headers = {
41
+ 'Content-Type': 'application/json',
42
+ 'pos-terminal-id': "".concat(terminalId)
43
+ };
44
+ }
45
+ else {
46
+ headers = {
47
+ 'Content-Type': 'application/json'
48
+ };
49
+ }
50
+ return headers;
51
+ };
37
52
  var PosAPI = /** @class */ (function () {
38
53
  function PosAPI(config) {
39
54
  var _this = this;
@@ -51,9 +66,7 @@ var PosAPI = /** @class */ (function () {
51
66
  url = "".concat(this.apiUrl).concat(endpoint);
52
67
  return [4 /*yield*/, fetch(url, {
53
68
  method: method,
54
- headers: {
55
- 'Content-Type': 'application/json'
56
- },
69
+ headers: makeHeaders(this.terminalId),
57
70
  body: data ? JSON.stringify(data) : null
58
71
  })];
59
72
  case 1:
@@ -83,6 +96,7 @@ var PosAPI = /** @class */ (function () {
83
96
  });
84
97
  }); };
85
98
  this.apiUrl = config.apiUrl;
99
+ this.terminalId = config.terminalId;
86
100
  }
87
101
  PosAPI.prototype.post = function (endpoint, data) {
88
102
  return this.request("/".concat(endpoint), 'POST', data);
@@ -33,54 +33,54 @@ export var fetchConfig = createAsyncThunk(ConfigActionType.FetchConfig, function
33
33
  var apiUrl = _a.apiUrl;
34
34
  var dispatch = _b.dispatch, getState = _b.getState, rejectWithValue = _b.rejectWithValue;
35
35
  return __awaiter(void 0, void 0, void 0, function () {
36
- var app, api, _c, _d,
36
+ var terminalId, app, api, _c, _d,
37
37
  // config,
38
- devicesList, _e, stores, _f, selectOptions, _g, itemTypes, store, devices, err, cashier, employee, tz, businessDate, err_1, menuColors, err_2;
39
- return __generator(this, function (_h) {
40
- switch (_h.label) {
38
+ devicesList, _e, stores, _f, selectOptions, _g, itemTypes, _h, menuColors, store, devices, err, cashier, employee, tz, businessDate, err_1, err_2;
39
+ return __generator(this, function (_j) {
40
+ switch (_j.label) {
41
41
  case 0:
42
- _h.trys.push([0, 6, , 7]);
43
- app = { apiUrl: apiUrl };
42
+ _j.trys.push([0, 6, , 7]);
43
+ terminalId = getState().pos.terminalId;
44
+ app = terminalId ? { apiUrl: apiUrl, terminalId: terminalId } : { apiUrl: apiUrl };
44
45
  api = new PosAPI(app);
45
46
  return [4 /*yield*/, Promise.all([
46
47
  // api.getConfig(),
47
48
  api.getSettings('DEVICES'),
48
49
  api.getSettings('STORE'),
49
50
  api.getSettings('SELECT_OPTION'),
50
- api.getSettings('ITEM_TYPE')
51
- // api.getMenuColors(),
51
+ api.getSettings('ITEM_TYPE'),
52
+ api.getSettings('ITEM_COLORS')
52
53
  ])];
53
54
  case 1:
54
- _c = _h.sent(), _d = _c[0], devicesList = _d === void 0 ? null : _d, _e = _c[1], stores = _e === void 0 ? null : _e, _f = _c[2], selectOptions = _f === void 0 ? null : _f, _g = _c[3], itemTypes = _g === void 0 ? null : _g;
55
- store = stores ? stores[0] : null;
56
- devices = devicesList ? devicesList[0] : null;
55
+ _c = _j.sent(), _d = _c[0], devicesList = _d === void 0 ? [] : _d, _e = _c[1], stores = _e === void 0 ? [] : _e, _f = _c[2], selectOptions = _f === void 0 ? [] : _f, _g = _c[3], itemTypes = _g === void 0 ? [] : _g, _h = _c[4], menuColors = _h === void 0 ? [] : _h;
56
+ store = stores[0] || null;
57
+ devices = devicesList[0] || null;
57
58
  if (!store || !devices) {
58
59
  err = errorsApi.internalServerError;
59
60
  return [2 /*return*/, rejectWithValue(err)];
60
61
  }
61
62
  cashier = getState().pos.cashier;
62
63
  if (!!cashier) return [3 /*break*/, 5];
63
- _h.label = 2;
64
+ _j.label = 2;
64
65
  case 2:
65
- _h.trys.push([2, 4, , 5]);
66
+ _j.trys.push([2, 4, , 5]);
66
67
  return [4 /*yield*/, api.getCashier()
67
68
  // TODO: figure out how to get the timezone from BE
68
69
  // const tz = timezoneMap[store.timezone]
69
70
  ];
70
71
  case 3:
71
- employee = _h.sent();
72
+ employee = _j.sent();
72
73
  tz = getUserTimezone();
73
74
  businessDate = currentLocalDateStr(tz);
74
75
  dispatch(setCashier(__assign(__assign({}, employee), { businessDate: businessDate })));
75
76
  return [3 /*break*/, 5];
76
77
  case 4:
77
- err_1 = _h.sent();
78
+ err_1 = _j.sent();
78
79
  return [3 /*break*/, 5];
79
80
  case 5:
80
81
  dispatch(setRevenueCenterId(store.revenue_center_id));
81
82
  dispatch(setKdsItemTypes(itemTypes));
82
83
  dispatch(setKdsPrepStations(devices.prep_stations));
83
- menuColors = [];
84
84
  return [2 /*return*/, {
85
85
  api: api,
86
86
  app: app,
@@ -97,7 +97,7 @@ export var fetchConfig = createAsyncThunk(ConfigActionType.FetchConfig, function
97
97
  retries: 0
98
98
  }];
99
99
  case 6:
100
- err_2 = _h.sent();
100
+ err_2 = _j.sent();
101
101
  return [2 /*return*/, rejectWithValue(err_2)];
102
102
  case 7: return [2 /*return*/];
103
103
  }
@@ -120,6 +120,9 @@ var configSlice = createSlice({
120
120
  },
121
121
  setApi: function (state, action) {
122
122
  state.api = action.payload;
123
+ },
124
+ setApiTerminal: function (state, action) {
125
+ state.api = new PosAPI(action.payload);
123
126
  }
124
127
  },
125
128
  extraReducers: function (builder) {
@@ -19,7 +19,7 @@ export var fetchMenuPages = createAsyncThunk(MenuPagesActionType.FetchMenuPages,
19
19
  case 0:
20
20
  _b.trys.push([0, 2, , 3]);
21
21
  api = getState().config.api;
22
- return [4 /*yield*/, api.getMenuPages()];
22
+ return [4 /*yield*/, api.getSettings('POS_PAGE')];
23
23
  case 1: return [2 /*return*/, _b.sent()];
24
24
  case 2:
25
25
  err_1 = _b.sent();
@@ -1,13 +1,14 @@
1
- import { OrderType } from '../global';
1
+ import { FullOrderType } from '../global';
2
2
  export interface MenuSection {
3
3
  name: string;
4
+ pos_page_id: number;
4
5
  pos_section_id: number;
5
6
  position: number;
6
7
  }
7
8
  export type MenuSections = Array<MenuSection>;
8
9
  export interface MenuPage {
9
10
  name: string;
10
- order_type: OrderType;
11
+ order_type: FullOrderType;
11
12
  pos_page_id: number;
12
13
  position: number;
13
14
  sections: MenuSections;
@@ -17,4 +18,4 @@ export interface MenuColor {
17
18
  id: number;
18
19
  color: string;
19
20
  }
20
- export type MenuColors = Array<MenuColor>;
21
+ export type MenuColors = MenuColor[];
@@ -30,7 +30,7 @@ export type ReceiptType = 'SALE' | 'REFUND';
30
30
  export type ChannelType = 'POS' | 'ONLINE' | 'APP' | 'PHONE' | 'KIOSK' | 'PORTAL';
31
31
  export type OrderStatus = 'OPEN' | 'HELD' | 'CLOSED' | 'VOID';
32
32
  export type TenderStatus = 'AUTHORIZED' | 'PAID' | 'REFUNDED' | 'VOID' | 'FAILED';
33
- export type PosSettingType = 'TIME_PUNCH' | 'CASH_EVENT' | 'ORDER' | 'DEPARTMENT' | 'DEVICES' | 'DISCOUNT' | 'EMPLOYEE' | 'HOUSE_ACCOUNT' | 'LOCATION' | 'MENU' | 'MENU_PAGE' | 'SELECT_OPTION' | 'SURCHARGE' | 'TAX' | 'STORE' | 'REVENUE_CENTER' | 'ITEM_TYPE' | 'QRCODE' | 'KIOSK_CONFIG';
33
+ export type PosSettingType = 'DEVICES' | 'STORE' | 'POS_MESSAGE' | 'LEVELUP' | 'DISCOUNT' | 'EMPLOYEE' | 'QRCODE' | 'HOUSE_ACCOUNT' | 'TAX' | 'SURCHARGE' | 'POS_PAGE' | 'MENU' | 'ITEM_TYPE' | 'SELECT_OPTION' | 'KIOSK_CONFIG' | 'ITEM_COLORS';
34
34
  export interface PicklistOption {
35
35
  name: string;
36
36
  value: string | number;
@@ -5,6 +5,7 @@ export declare const flattenItems: (categories: MenuCategories) => import("../ty
5
5
  export declare const makeMenuSections: (sections: MenuSections, categories: MenuCategories) => {
6
6
  items: import("../types").MenuItem[];
7
7
  name: string;
8
+ pos_page_id: number;
8
9
  pos_section_id: number;
9
10
  position: number;
10
11
  }[];
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@open-tender/store",
3
- "version": "0.7.5",
3
+ "version": "0.7.7",
4
4
  "description": "A library of hooks, reducers, utility functions, and types for use with Open Tender applications that utilize our in-store POS API",
5
5
  "main": "./dist/cjs/index.js",
6
6
  "module": "./dist/esm/index.js",