@things-factory/integration-lmd 4.3.179 → 4.3.186

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.
Files changed (188) hide show
  1. package/client/pages/integration-lmd-detail.js +459 -0
  2. package/client/pages/integration-lmd.js +48 -117
  3. package/client/route.js +4 -0
  4. package/dist-server/{graphql/resolvers → constants}/index.js +1 -2
  5. package/dist-server/constants/index.js.map +1 -0
  6. package/dist-server/constants/lmd.js +9 -0
  7. package/dist-server/constants/lmd.js.map +1 -0
  8. package/dist-server/controllers/etrax/etrax.js +2 -2
  9. package/dist-server/controllers/etrax/etrax.js.map +1 -1
  10. package/dist-server/controllers/lmd-api/index.js +37 -2
  11. package/dist-server/controllers/lmd-api/index.js.map +1 -1
  12. package/dist-server/controllers/lmd-middleware/apis/create-parcel.js +54 -0
  13. package/dist-server/controllers/lmd-middleware/apis/create-parcel.js.map +1 -0
  14. package/dist-server/controllers/lmd-middleware/apis/delete-parcel.js +25 -0
  15. package/dist-server/controllers/lmd-middleware/apis/delete-parcel.js.map +1 -0
  16. package/dist-server/controllers/lmd-middleware/apis/get-awb.js +19 -0
  17. package/dist-server/controllers/lmd-middleware/apis/get-awb.js.map +1 -0
  18. package/dist-server/controllers/lmd-middleware/apis/get-parcel.js +47 -0
  19. package/dist-server/controllers/lmd-middleware/apis/get-parcel.js.map +1 -0
  20. package/dist-server/controllers/lmd-middleware/apis/get-parcels.js +15 -0
  21. package/dist-server/controllers/lmd-middleware/apis/get-parcels.js.map +1 -0
  22. package/dist-server/{graphql/types → controllers/lmd-middleware/apis}/index.js +5 -2
  23. package/dist-server/controllers/lmd-middleware/apis/index.js.map +1 -0
  24. package/dist-server/{graphql → controllers/lmd-middleware}/index.js +8 -8
  25. package/dist-server/controllers/lmd-middleware/index.js.map +1 -0
  26. package/dist-server/controllers/lmd-middleware/lmd-middleware.js +60 -0
  27. package/dist-server/controllers/lmd-middleware/lmd-middleware.js.map +1 -0
  28. package/dist-server/controllers/lmd-middleware/platform-action.js +10 -0
  29. package/dist-server/controllers/lmd-middleware/platform-action.js.map +1 -0
  30. package/dist-server/engine/task/lmd-api.js +2 -2
  31. package/dist-server/engine/task/lmd-api.js.map +1 -1
  32. package/dist-server/index.js +2 -2
  33. package/dist-server/index.js.map +1 -1
  34. package/dist-server/service/courier-service/courier-service-mutation.js +120 -0
  35. package/dist-server/service/courier-service/courier-service-mutation.js.map +1 -0
  36. package/dist-server/service/courier-service/courier-service-query.js +87 -0
  37. package/dist-server/service/courier-service/courier-service-query.js.map +1 -0
  38. package/dist-server/service/courier-service/courier-service-type.js +81 -0
  39. package/dist-server/service/courier-service/courier-service-type.js.map +1 -0
  40. package/dist-server/{entities → service/courier-service}/courier-service.js +28 -10
  41. package/dist-server/service/courier-service/courier-service.js.map +1 -0
  42. package/dist-server/service/courier-service/index.js +9 -0
  43. package/dist-server/service/courier-service/index.js.map +1 -0
  44. package/dist-server/service/index.js +40 -0
  45. package/dist-server/service/index.js.map +1 -0
  46. package/dist-server/service/last-mile-delivery/index.js +9 -0
  47. package/dist-server/service/last-mile-delivery/index.js.map +1 -0
  48. package/dist-server/service/last-mile-delivery/last-mile-delivery-mutation.js +209 -0
  49. package/dist-server/service/last-mile-delivery/last-mile-delivery-mutation.js.map +1 -0
  50. package/dist-server/service/last-mile-delivery/last-mile-delivery-query.js +89 -0
  51. package/dist-server/service/last-mile-delivery/last-mile-delivery-query.js.map +1 -0
  52. package/dist-server/service/last-mile-delivery/last-mile-delivery-type.js +153 -0
  53. package/dist-server/service/last-mile-delivery/last-mile-delivery-type.js.map +1 -0
  54. package/dist-server/{entities → service/last-mile-delivery}/last-mile-delivery.js +90 -21
  55. package/dist-server/service/last-mile-delivery/last-mile-delivery.js.map +1 -0
  56. package/dist-server/service/last-mile-delivery-setting/index.js +9 -0
  57. package/dist-server/service/last-mile-delivery-setting/index.js.map +1 -0
  58. package/dist-server/service/last-mile-delivery-setting/last-mile-delivery-setting-mutation.js +120 -0
  59. package/dist-server/service/last-mile-delivery-setting/last-mile-delivery-setting-mutation.js.map +1 -0
  60. package/dist-server/service/last-mile-delivery-setting/last-mile-delivery-setting-query.js +87 -0
  61. package/dist-server/service/last-mile-delivery-setting/last-mile-delivery-setting-query.js.map +1 -0
  62. package/dist-server/service/last-mile-delivery-setting/last-mile-delivery-setting-type.js +79 -0
  63. package/dist-server/service/last-mile-delivery-setting/last-mile-delivery-setting-type.js.map +1 -0
  64. package/dist-server/service/last-mile-delivery-setting/last-mile-delivery-setting.js +116 -0
  65. package/dist-server/service/last-mile-delivery-setting/last-mile-delivery-setting.js.map +1 -0
  66. package/package.json +4 -4
  67. package/server/constants/index.ts +1 -0
  68. package/server/constants/lmd.ts +5 -0
  69. package/server/controllers/etrax/etrax.ts +1 -1
  70. package/server/controllers/lmd-api/decorators.ts +1 -1
  71. package/server/controllers/lmd-api/index.ts +18 -3
  72. package/server/controllers/lmd-middleware/apis/create-parcel.ts +48 -0
  73. package/server/controllers/lmd-middleware/apis/delete-parcel.ts +20 -0
  74. package/server/controllers/lmd-middleware/apis/get-awb.ts +14 -0
  75. package/server/controllers/lmd-middleware/apis/get-parcel.ts +42 -0
  76. package/server/controllers/lmd-middleware/apis/get-parcels.ts +10 -0
  77. package/server/controllers/lmd-middleware/apis/index.ts +5 -0
  78. package/server/controllers/lmd-middleware/index.ts +7 -0
  79. package/server/controllers/lmd-middleware/lmd-middleware.ts +56 -0
  80. package/server/controllers/lmd-middleware/platform-action.ts +7 -0
  81. package/server/engine/task/lmd-api.ts +1 -1
  82. package/server/index.ts +2 -2
  83. package/server/service/courier-service/courier-service-mutation.ts +112 -0
  84. package/server/service/courier-service/courier-service-query.ts +43 -0
  85. package/server/service/courier-service/courier-service-type.ts +48 -0
  86. package/server/service/courier-service/courier-service.ts +66 -0
  87. package/server/service/courier-service/index.ts +6 -0
  88. package/server/service/index.ts +26 -0
  89. package/server/service/last-mile-delivery/index.ts +6 -0
  90. package/server/service/last-mile-delivery/last-mile-delivery-mutation.ts +247 -0
  91. package/server/service/last-mile-delivery/last-mile-delivery-query.ts +46 -0
  92. package/server/service/last-mile-delivery/last-mile-delivery-type.ts +103 -0
  93. package/server/service/last-mile-delivery/last-mile-delivery.ts +151 -0
  94. package/server/service/last-mile-delivery-setting/index.ts +6 -0
  95. package/server/service/last-mile-delivery-setting/last-mile-delivery-setting-mutation.ts +112 -0
  96. package/server/service/last-mile-delivery-setting/last-mile-delivery-setting-query.ts +43 -0
  97. package/server/service/last-mile-delivery-setting/last-mile-delivery-setting-type.ts +46 -0
  98. package/server/service/last-mile-delivery-setting/last-mile-delivery-setting.ts +92 -0
  99. package/things-factory.config.js +4 -0
  100. package/translations/en.json +14 -2
  101. package/translations/ko.json +14 -1
  102. package/translations/ms.json +14 -1
  103. package/translations/zh.json +14 -2
  104. package/dist-server/entities/courier-service.js.map +0 -1
  105. package/dist-server/entities/index.js +0 -9
  106. package/dist-server/entities/index.js.map +0 -1
  107. package/dist-server/entities/last-mile-delivery.js.map +0 -1
  108. package/dist-server/graphql/index.js.map +0 -1
  109. package/dist-server/graphql/resolvers/courier-service/courier-service-query.js +0 -42
  110. package/dist-server/graphql/resolvers/courier-service/courier-service-query.js.map +0 -1
  111. package/dist-server/graphql/resolvers/courier-service/create-courier-service.js +0 -12
  112. package/dist-server/graphql/resolvers/courier-service/create-courier-service.js.map +0 -1
  113. package/dist-server/graphql/resolvers/courier-service/delete-courier-service.js +0 -13
  114. package/dist-server/graphql/resolvers/courier-service/delete-courier-service.js.map +0 -1
  115. package/dist-server/graphql/resolvers/courier-service/delete-courier-services.js +0 -16
  116. package/dist-server/graphql/resolvers/courier-service/delete-courier-services.js.map +0 -1
  117. package/dist-server/graphql/resolvers/courier-service/index.js +0 -15
  118. package/dist-server/graphql/resolvers/courier-service/index.js.map +0 -1
  119. package/dist-server/graphql/resolvers/courier-service/update-courier-service.js +0 -16
  120. package/dist-server/graphql/resolvers/courier-service/update-courier-service.js.map +0 -1
  121. package/dist-server/graphql/resolvers/courier-service/update-multiple-courier-service.js +0 -31
  122. package/dist-server/graphql/resolvers/courier-service/update-multiple-courier-service.js.map +0 -1
  123. package/dist-server/graphql/resolvers/index.js.map +0 -1
  124. package/dist-server/graphql/resolvers/last-mile-delivery/create-last-mile-delivery.js +0 -11
  125. package/dist-server/graphql/resolvers/last-mile-delivery/create-last-mile-delivery.js.map +0 -1
  126. package/dist-server/graphql/resolvers/last-mile-delivery/delete-last-mile-deliveries.js +0 -20
  127. package/dist-server/graphql/resolvers/last-mile-delivery/delete-last-mile-deliveries.js.map +0 -1
  128. package/dist-server/graphql/resolvers/last-mile-delivery/delete-last-mile-delivery.js +0 -13
  129. package/dist-server/graphql/resolvers/last-mile-delivery/delete-last-mile-delivery.js.map +0 -1
  130. package/dist-server/graphql/resolvers/last-mile-delivery/index.js +0 -15
  131. package/dist-server/graphql/resolvers/last-mile-delivery/index.js.map +0 -1
  132. package/dist-server/graphql/resolvers/last-mile-delivery/last-mile-delivery-query.js +0 -41
  133. package/dist-server/graphql/resolvers/last-mile-delivery/last-mile-delivery-query.js.map +0 -1
  134. package/dist-server/graphql/resolvers/last-mile-delivery/update-last-mile-delivery.js +0 -15
  135. package/dist-server/graphql/resolvers/last-mile-delivery/update-last-mile-delivery.js.map +0 -1
  136. package/dist-server/graphql/resolvers/last-mile-delivery/update-multiple-last-mile-delivery.js +0 -30
  137. package/dist-server/graphql/resolvers/last-mile-delivery/update-multiple-last-mile-delivery.js.map +0 -1
  138. package/dist-server/graphql/types/courier-service/courier-service-list.js +0 -14
  139. package/dist-server/graphql/types/courier-service/courier-service-list.js.map +0 -1
  140. package/dist-server/graphql/types/courier-service/courier-service-patch.js +0 -17
  141. package/dist-server/graphql/types/courier-service/courier-service-patch.js.map +0 -1
  142. package/dist-server/graphql/types/courier-service/courier-service.js +0 -21
  143. package/dist-server/graphql/types/courier-service/courier-service.js.map +0 -1
  144. package/dist-server/graphql/types/courier-service/index.js +0 -40
  145. package/dist-server/graphql/types/courier-service/index.js.map +0 -1
  146. package/dist-server/graphql/types/courier-service/new-courier-service.js +0 -15
  147. package/dist-server/graphql/types/courier-service/new-courier-service.js.map +0 -1
  148. package/dist-server/graphql/types/index.js.map +0 -1
  149. package/dist-server/graphql/types/last-mile-delivery/index.js +0 -40
  150. package/dist-server/graphql/types/last-mile-delivery/index.js.map +0 -1
  151. package/dist-server/graphql/types/last-mile-delivery/last-mile-delivery-list.js +0 -14
  152. package/dist-server/graphql/types/last-mile-delivery/last-mile-delivery-list.js.map +0 -1
  153. package/dist-server/graphql/types/last-mile-delivery/last-mile-delivery-patch.js +0 -26
  154. package/dist-server/graphql/types/last-mile-delivery/last-mile-delivery-patch.js.map +0 -1
  155. package/dist-server/graphql/types/last-mile-delivery/last-mile-delivery.js +0 -31
  156. package/dist-server/graphql/types/last-mile-delivery/last-mile-delivery.js.map +0 -1
  157. package/dist-server/graphql/types/last-mile-delivery/new-last-mile-delivery.js +0 -24
  158. package/dist-server/graphql/types/last-mile-delivery/new-last-mile-delivery.js.map +0 -1
  159. package/server/entities/courier-service.ts +0 -44
  160. package/server/entities/index.ts +0 -6
  161. package/server/entities/last-mile-delivery.ts +0 -84
  162. package/server/graphql/index.ts +0 -9
  163. package/server/graphql/resolvers/courier-service/courier-service-query.ts +0 -51
  164. package/server/graphql/resolvers/courier-service/create-courier-service.ts +0 -16
  165. package/server/graphql/resolvers/courier-service/delete-courier-service.ts +0 -13
  166. package/server/graphql/resolvers/courier-service/delete-courier-services.ts +0 -16
  167. package/server/graphql/resolvers/courier-service/index.ts +0 -19
  168. package/server/graphql/resolvers/courier-service/update-courier-service.ts +0 -19
  169. package/server/graphql/resolvers/courier-service/update-multiple-courier-service.ts +0 -46
  170. package/server/graphql/resolvers/index.ts +0 -2
  171. package/server/graphql/resolvers/last-mile-delivery/create-last-mile-delivery.ts +0 -14
  172. package/server/graphql/resolvers/last-mile-delivery/delete-last-mile-deliveries.ts +0 -25
  173. package/server/graphql/resolvers/last-mile-delivery/delete-last-mile-delivery.ts +0 -13
  174. package/server/graphql/resolvers/last-mile-delivery/index.ts +0 -19
  175. package/server/graphql/resolvers/last-mile-delivery/last-mile-delivery-query.ts +0 -49
  176. package/server/graphql/resolvers/last-mile-delivery/update-last-mile-delivery.ts +0 -18
  177. package/server/graphql/resolvers/last-mile-delivery/update-multiple-last-mile-delivery.ts +0 -45
  178. package/server/graphql/types/courier-service/courier-service-list.ts +0 -8
  179. package/server/graphql/types/courier-service/courier-service-patch.ts +0 -11
  180. package/server/graphql/types/courier-service/courier-service.ts +0 -15
  181. package/server/graphql/types/courier-service/index.ts +0 -21
  182. package/server/graphql/types/courier-service/new-courier-service.ts +0 -9
  183. package/server/graphql/types/index.ts +0 -2
  184. package/server/graphql/types/last-mile-delivery/index.ts +0 -21
  185. package/server/graphql/types/last-mile-delivery/last-mile-delivery-list.ts +0 -8
  186. package/server/graphql/types/last-mile-delivery/last-mile-delivery-patch.ts +0 -20
  187. package/server/graphql/types/last-mile-delivery/last-mile-delivery.ts +0 -25
  188. package/server/graphql/types/last-mile-delivery/new-last-mile-delivery.ts +0 -18
@@ -0,0 +1,459 @@
1
+ import { MultiColumnFormStyles } from '@things-factory/form-ui'
2
+ import { client, CustomAlert, gqlContext, navigate, PageView } from '@things-factory/shell'
3
+ import { CommonButtonStyles, ScrollbarStyles } from '@things-factory/styles'
4
+ import '@things-factory/grist-ui'
5
+ import gql from 'graphql-tag'
6
+ import { i18next, localize } from '@things-factory/i18n-base'
7
+ import { css, html, LitElement } from 'lit'
8
+ import { gqlBuilder, isMobileDevice } from '@things-factory/utils'
9
+ import { buildDomainContext } from './integration-lmd'
10
+
11
+ class IntegrationLmdDetail extends localize(i18next)(PageView) {
12
+ static get styles() {
13
+ return [
14
+ ScrollbarStyles,
15
+ MultiColumnFormStyles,
16
+ css`
17
+ :host {
18
+ display: flex;
19
+ flex-direction: column;
20
+ overflow: hidden;
21
+ }
22
+ .form-container {
23
+ display: flex;
24
+ }
25
+
26
+ .form-container > form {
27
+ flex: 1;
28
+ }
29
+
30
+ .container {
31
+ flex: 1;
32
+ display: flex;
33
+ overflow: hidden;
34
+ min-height: 50vh;
35
+ }
36
+ .grist {
37
+ background-color: var(--main-section-background-color);
38
+ display: flex;
39
+ flex-direction: column;
40
+ flex: 1;
41
+ overflow-y: auto;
42
+ }
43
+ data-grist {
44
+ overflow-y: hidden;
45
+ flex: 1;
46
+ }
47
+ h2 {
48
+ padding: var(--subtitle-padding);
49
+ font: var(--subtitle-font);
50
+ color: var(--subtitle-text-color);
51
+ border-bottom: var(--subtitle-border-bottom);
52
+ }
53
+ .grist h2 {
54
+ margin: var(--grist-title-margin);
55
+ border: var(--grist-title-border);
56
+ font: var(--grist-title-font);
57
+ color: var(--secondary-color);
58
+ }
59
+
60
+ .grist h2 mwc-icon {
61
+ vertical-align: middle;
62
+ margin: var(--grist-title-icon-margin);
63
+ font-size: var(--grist-title-icon-size);
64
+ color: var(--grist-title-icon-color);
65
+ }
66
+
67
+ h2 + data-grist {
68
+ padding-top: var(--grist-title-with-grid-padding);
69
+ }
70
+
71
+ [hidden] {
72
+ display: none;
73
+ }
74
+ `
75
+ ]
76
+ }
77
+
78
+ static get properties() {
79
+ return {
80
+ _searchFields: Array,
81
+ config: Object,
82
+ _data: Object
83
+ }
84
+ }
85
+
86
+ constructor() {
87
+ super()
88
+ this._data = { lmdSettingData: { records: [] } }
89
+ }
90
+
91
+ get context() {
92
+ return {
93
+ title: i18next.t('title.last_mile_delivery_platform_detail'),
94
+ actions: [
95
+ {
96
+ title: i18next.t('button.save'),
97
+ action: this._updateLastMileDelivery.bind(this),
98
+ ...CommonButtonStyles.save
99
+ },
100
+ {
101
+ title: i18next.t('button.back'),
102
+ action: this._navigateToList.bind(this),
103
+ ...CommonButtonStyles.back
104
+ }
105
+ ],
106
+ help: 'page/integration-lmd-detail'
107
+ }
108
+ }
109
+
110
+ get _lmdSettingForm() {
111
+ return this.shadowRoot.querySelector('form[name=integrationLmdDetails]')
112
+ }
113
+
114
+ get _lmdSettingGrist() {
115
+ return this.shadowRoot.querySelector('data-grist#lmd-setting-grist')
116
+ }
117
+
118
+ render() {
119
+ const PLATFORMS = [
120
+ { name: 'NONE', value: 'NONE' },
121
+ { name: 'eTRax', value: 'ETRAX' },
122
+ { name: 'GDex MY', value: 'GDEX_MY' },
123
+ { name: 'JnT MY', value: 'JNT_MY' },
124
+ { name: 'JnT SG', value: 'JNT_SG' },
125
+ { name: 'DHL MY', value: 'DHL_MY' },
126
+ { name: 'Airspeed', value: 'AIRSPEED' }
127
+ ]
128
+
129
+ return html`
130
+ <div class="form-container">
131
+ <form name="integrationLmdDetails" class="multi-column-form">
132
+ <fieldset>
133
+ <legend>${i18next.t('title.last_mile_delivery_platform_detail')}${this?._data?.id ? '' : ': NEW'}</legend>
134
+
135
+ <label>${i18next.t('label.name')}</label>
136
+ <input name="name" required .value="${this?._data?.name}" />
137
+
138
+ <label>${i18next.t('label.description')}</label>
139
+ <input name="description" .value="${this?._data?.description}" />
140
+
141
+ <label>${i18next.t('label.platform')}</label>
142
+ <select
143
+ name="platform"
144
+ @change=${e => {
145
+ this._data.platform = e.currentTarget.value
146
+ }}
147
+ >
148
+ ${Object.keys(PLATFORMS).map(
149
+ key =>
150
+ html`
151
+ <option value="${PLATFORMS[key].value}" ?selected=${this?._data?.platform === PLATFORMS[key].value}>
152
+ ${PLATFORMS[key].name}
153
+ </option>
154
+ `
155
+ )}
156
+ </select>
157
+
158
+ <label>${i18next.t('label.client_id')}</label>
159
+ <input name="clientId" .value="${this?._data?.clientId}" />
160
+
161
+ <label>${i18next.t('label.secret_key')}</label>
162
+ <input name="secretKey" type="password" .value="${this?._data?.secretKey}" />
163
+
164
+ <label>${i18next.t('label.rank')}</label>
165
+ <input name="rank" required type="number" .value="${this?._data?.rank}" />
166
+
167
+ <label>${i18next.t('label.pickup_account_id')}</label>
168
+ <input name="pickupAccountId" .value="${this?._data?.pickupAccountId}" />
169
+
170
+ <label>${i18next.t('label.sold_to_account_id')}</label>
171
+ <input name="soldToAccountId" .value="${this?._data?.soldToAccountId}" />
172
+
173
+ <label>${i18next.t('label.access_token')}</label>
174
+ <input name="accessToken" .value="${this?._data?.accessToken}" />
175
+ </fieldset>
176
+ </form>
177
+ </div>
178
+ <div class="container">
179
+ <div class="grist">
180
+ <h2><mwc-icon>list_alt</mwc-icon>${i18next.t('title.detail_settings')}</h2>
181
+
182
+ <data-grist
183
+ id="lmd-setting-grist"
184
+ .mode=${isMobileDevice() ? 'LIST' : 'GRID'}
185
+ .data=${this._data.lmdSettingData}
186
+ .config=${this.config}
187
+ ></data-grist>
188
+ </div>
189
+ </div>
190
+ `
191
+ }
192
+
193
+ async pageInitialized() {
194
+ this._clearView()
195
+ this.config = {
196
+ pagination: { infinite: true },
197
+ rows: { appendable: true },
198
+ list: { fields: ['name', 'geoCountry', 'includePostalCode', 'excludePostalCode'] },
199
+ columns: [
200
+ { type: 'gutter', gutterName: 'dirty' },
201
+ { type: 'gutter', gutterName: 'sequence' },
202
+ { type: 'gutter', gutterName: 'row-selector', multiple: true },
203
+ {
204
+ type: 'string',
205
+ name: 'id',
206
+ hidden: true
207
+ },
208
+ {
209
+ type: 'string',
210
+ name: 'name',
211
+ header: i18next.t('field.name'),
212
+ record: { editable: true },
213
+ width: 200
214
+ },
215
+ {
216
+ type: 'object',
217
+ name: 'geoCountry',
218
+ record: {
219
+ editable: true,
220
+ options: {
221
+ queryName: 'geoCountriesWithoutParam',
222
+ nameField: 'name',
223
+ descriptionField: 'description',
224
+ select: [
225
+ { name: 'id', hidden: true },
226
+ { name: 'name', header: i18next.t('field.name') },
227
+ { name: 'description', header: i18next.t('field.description') }
228
+ ]
229
+ }
230
+ },
231
+ header: i18next.t('field.country'),
232
+ sortable: true,
233
+ width: 230
234
+ },
235
+ {
236
+ type: 'string',
237
+ name: 'includePostalCode',
238
+ header: i18next.t('field.include_postal_code'),
239
+ record: { editable: true },
240
+ width: 200
241
+ },
242
+ {
243
+ type: 'string',
244
+ name: 'excludePostalCode',
245
+ header: i18next.t('field.exclude_postal_code'),
246
+ record: { editable: true },
247
+ width: 200
248
+ }
249
+ ]
250
+ }
251
+ }
252
+
253
+ async pageUpdated(changes, lifecycle) {
254
+ try {
255
+ if (this.active) {
256
+ this._clearView()
257
+ await this.updateComplete
258
+ this._data = { id: changes.resourceId || this?._data?.id || null }
259
+ await this._fetchOrder()
260
+ }
261
+ if (this?._data && !this._data?.rank) {
262
+ this._data.rank = 0
263
+ }
264
+ this.updateContext()
265
+ } catch (e) {
266
+ this._showToast(e)
267
+ } finally {
268
+ this.updateContext()
269
+ }
270
+ }
271
+
272
+ async _fetchOrder() {
273
+ if (this?._data?.id && this?._data?.id != 'new') {
274
+ const response = await client.query({
275
+ query: gql`
276
+ query lastMileDelivery($id: String!) {
277
+ lastMileDelivery(id: $id) {
278
+ id
279
+ name
280
+ description
281
+ platform
282
+ clientId
283
+ secretKey
284
+ status
285
+ rank
286
+ pickupAccountId
287
+ soldToAccountId
288
+ accessToken
289
+ countryCode
290
+ lastMileDeliverySettings {
291
+ id
292
+ name
293
+ includePostalCode
294
+ excludePostalCode
295
+ geoCountry {
296
+ id
297
+ name
298
+ description
299
+ }
300
+ }
301
+ }
302
+ }
303
+ `,
304
+ variables: { id: this._data.id },
305
+ context: gqlContext()
306
+ })
307
+ if (!response.errors) {
308
+ this._data = {
309
+ ...this._data,
310
+ ...response.data.lastMileDelivery,
311
+ lmdSettingData: {
312
+ records: response.data?.lastMileDelivery?.lastMileDeliverySettings || [],
313
+ total: response.data?.lastMileDelivery?.lastMileDeliverySettings.length || 0
314
+ }
315
+ }
316
+ }
317
+ return
318
+ } else {
319
+ this._clearView()
320
+ }
321
+ }
322
+
323
+ async _updateLastMileDelivery(e) {
324
+ try {
325
+ this._validateForm()
326
+
327
+ const result = await CustomAlert({
328
+ title: i18next.t('title.are_you_sure'),
329
+ text: i18next.t('text.update_lmd_setting_data'),
330
+ confirmButton: { text: i18next.t('button.submit') },
331
+ cancelButton: { text: i18next.t('button.cancel') }
332
+ })
333
+
334
+ if (!result.value) return
335
+
336
+ let lastMileDeliveryPatch = {
337
+ ...this._getFormInfo()
338
+ }
339
+
340
+ if (this._data?.id != 'new') {
341
+ lastMileDeliveryPatch.id = this._data?.id
342
+ }
343
+
344
+ const response = await client.mutate({
345
+ mutation: gql`
346
+ mutation upsertLastMileDelivery(
347
+ $lastMileDeliveryPatch: LastMileDeliveryPatch!
348
+ $lastMileDeliverySettingPatch: [LastMileDeliverySettingPatch!]
349
+ ) {
350
+ upsertLastMileDelivery(
351
+ lastMileDeliveryPatch: $lastMileDeliveryPatch
352
+ lastMileDeliverySettingPatch: $lastMileDeliverySettingPatch
353
+ ) {
354
+ id
355
+ name
356
+ }
357
+ }
358
+ `,
359
+ variables: { lastMileDeliveryPatch, lastMileDeliverySettingPatch: this._getLmdSettingData() },
360
+ context: gqlContext()
361
+ })
362
+
363
+ if (!response.errors) {
364
+ this._showToast({ message: i18next.t('text.details_saved') })
365
+ this._clearView()
366
+ this._navigateToList()
367
+ }
368
+ } catch (e) {
369
+ this._showToast(e)
370
+ }
371
+ }
372
+
373
+ _validateForm() {
374
+ if (!this._lmdSettingForm.checkValidity()) throw new Error(i18next.t('text.lmd_setting_form_invalid'))
375
+ // if (this._draftOrderData?.container && !this.containerNo.value)
376
+ // throw new Error(i18next.t('text.container_no_is_empty'))
377
+ }
378
+
379
+ _getFormInfo() {
380
+ const formData = this._serializeForm(this._lmdSettingForm)
381
+ return formData
382
+ }
383
+
384
+ _getLmdSettingData() {
385
+ return this._lmdSettingGrist.dirtyData.records.map(record => {
386
+ let data = {
387
+ id: record.id ? record.id.toString() : null,
388
+ name: record.name ? record.name.toString() : null,
389
+ geoCountry: record.geoCountry,
390
+ includePostalCode: record.includePostalCode ? record.includePostalCode.toString() : null,
391
+ excludePostalCode: record.excludePostalCode ? record.excludePostalCode.toString() : null
392
+ }
393
+
394
+ return data
395
+ })
396
+ }
397
+
398
+ _onLmdSettingGristChangeHandler(e) {
399
+ let data = {
400
+ ...this._data.lmdSettingData,
401
+ ...this._data.lmdSettingData.dirtyData
402
+ }
403
+ let dirty = {
404
+ ...this._data.lmdSettingData.dirtyData
405
+ }
406
+
407
+ this._data.lmdSettingData = data
408
+ }
409
+
410
+ _clearView() {
411
+ this._data = {
412
+ ...this._data,
413
+ name: '',
414
+ description: '',
415
+ clientId: '',
416
+ secretKey: '',
417
+ rank: 0,
418
+ platform: '',
419
+ pickupAccountId: '',
420
+ soldToAccountId: '',
421
+ accessToken: '',
422
+ lmdSettingData: { records: [], total: 0 }
423
+ }
424
+ }
425
+
426
+ _navigateToList() {
427
+ let context = gqlContext()
428
+ navigate(`integration-lmd${buildDomainContext(context.headers['x-things-factory-domain'])}`)
429
+ }
430
+
431
+ _serializeForm(form) {
432
+ let obj = {}
433
+ Array.from(form.querySelectorAll('input, select')).forEach(field => {
434
+ if (!field.hasAttribute('hidden') && field.value) {
435
+ let value = field.value
436
+ if (field.type == 'number') {
437
+ value = parseFloat(field.value)
438
+ }
439
+
440
+ obj[field.name] = field.type === 'checkbox' ? field.checked : value
441
+ }
442
+ })
443
+
444
+ return obj
445
+ }
446
+
447
+ _showToast({ type, message }) {
448
+ document.dispatchEvent(
449
+ new CustomEvent('notify', {
450
+ detail: {
451
+ type,
452
+ message
453
+ }
454
+ })
455
+ )
456
+ }
457
+ }
458
+
459
+ window.customElements.define('integration-lmd-detail', IntegrationLmdDetail)
@@ -5,6 +5,8 @@ import { CommonButtonStyles, ScrollbarStyles } from '@things-factory/styles'
5
5
  import { isMobileDevice } from '@things-factory/utils'
6
6
  import gql from 'graphql-tag'
7
7
  import { css, html } from 'lit-element'
8
+ import './integration-lmd-detail'
9
+ import { buildGqlContext } from '@things-factory/shell'
8
10
 
9
11
  class IntegrationLmd extends localize(i18next)(PageView) {
10
12
  static get styles() {
@@ -41,10 +43,15 @@ class IntegrationLmd extends localize(i18next)(PageView) {
41
43
  return {
42
44
  title: i18next.t('title.last_mile_delivery_platform'),
43
45
  actions: [
46
+ // {
47
+ // title: i18next.t('button.save'),
48
+ // action: this._updateLastMileDelivery.bind(this),
49
+ // ...CommonButtonStyles.save
50
+ // },
44
51
  {
45
- title: i18next.t('button.save'),
46
- action: this._updateLastMileDelivery.bind(this),
47
- ...CommonButtonStyles.save
52
+ title: i18next.t('button.add'),
53
+ action: this._navigateToCreate.bind(this),
54
+ ...CommonButtonStyles.add
48
55
  },
49
56
  {
50
57
  title: i18next.t('button.delete'),
@@ -70,11 +77,22 @@ class IntegrationLmd extends localize(i18next)(PageView) {
70
77
 
71
78
  async pageInitialized() {
72
79
  this.config = {
73
- rows: { selectable: { multiple: true }, appendable: true },
80
+ rows: { selectable: { multiple: true }, appendable: false },
81
+ list: { fields: ['name', 'platform', 'status', 'createdAt', 'updatedAt'] },
74
82
  columns: [
75
- { type: 'gutter', gutterName: 'dirty' },
76
83
  { type: 'gutter', gutterName: 'sequence' },
77
84
  { type: 'gutter', gutterName: 'row-selector', multiple: true },
85
+ {
86
+ type: 'gutter',
87
+ gutterName: 'button',
88
+ icon: 'reorder',
89
+ handlers: {
90
+ click: (columns, data, column, record, rowIndex) => {
91
+ let context = gqlContext()
92
+ navigate(`integration-lmd-detail/${record.id}${buildDomainContext(context.headers['x-things-factory-domain'])}`)
93
+ }
94
+ }
95
+ },
78
96
  {
79
97
  type: 'string',
80
98
  name: 'id',
@@ -84,103 +102,36 @@ class IntegrationLmd extends localize(i18next)(PageView) {
84
102
  type: 'string',
85
103
  name: 'name',
86
104
  header: i18next.t('field.name'),
87
- record: { editable: true },
88
105
  sortable: true,
89
- width: 180
106
+ width: 200
90
107
  },
91
108
  {
92
- type: 'select',
109
+ type: 'string',
93
110
  name: 'platform',
94
111
  header: i18next.t('field.platform'),
95
- record: {
96
- editable: true,
97
- options: ['', 'eTrax']
98
- },
99
112
  sortable: true,
100
- width: 180
101
- },
102
- {
103
- type: 'string',
104
- name: 'clientId',
105
- header: i18next.t('field.client_id'),
106
- record: { editable: true },
107
- width: 180
108
- },
109
- {
110
- type: 'select',
111
- name: 'clientType',
112
- header: i18next.t('field.client_type'),
113
- record: {
114
- editable: true,
115
- options: [
116
- {
117
- display: '',
118
- value: ''
119
- },
120
- {
121
- display: 'Business',
122
- value: 'B'
123
- },
124
- {
125
- display: 'Individual',
126
- value: 'I'
127
- }
128
- ]
129
- },
130
- width: 180
113
+ width: 200
131
114
  },
132
115
  {
133
116
  type: 'string',
134
- name: 'clientName',
135
- header: i18next.t('field.client_name'),
136
- record: { editable: true },
137
- sortable: false,
138
- width: 180
139
- },
140
- {
141
- type: 'select',
142
- name: 'countryCode',
143
- header: i18next.t('field.country_code'),
144
- record: {
145
- editable: true,
146
- options: [
147
- {
148
- display: '',
149
- value: ''
150
- },
151
- {
152
- display: 'Malaysia',
153
- value: 'my'
154
- },
155
- {
156
- display: 'Singapore',
157
- value: 'sg'
158
- }
159
- ]
160
- },
117
+ name: 'status',
118
+ header: i18next.t('field.status'),
161
119
  sortable: true,
162
- width: 180
163
- },
164
- {
165
- type: 'string',
166
- name: 'secretKey',
167
- header: i18next.t('field.secret_key'),
168
- record: { editable: true },
169
- width: 100
120
+ width: 200
170
121
  },
171
122
  {
172
- type: 'string',
173
- name: 'status',
174
- header: i18next.t('field.status'),
123
+ type: 'datetime',
124
+ name: 'createdAt',
125
+ header: i18next.t('field.created_at'),
175
126
  sortable: true,
176
- width: 100
127
+ width: 200
177
128
  },
178
129
  {
179
130
  type: 'datetime',
180
131
  name: 'updatedAt',
181
132
  header: i18next.t('field.updated_at'),
182
133
  sortable: true,
183
- width: 100
134
+ width: 200
184
135
  }
185
136
  ]
186
137
  }
@@ -191,7 +142,7 @@ class IntegrationLmd extends localize(i18next)(PageView) {
191
142
  name: 'name',
192
143
  type: 'text',
193
144
  field: 'name',
194
- props: { searchOp: 'i_like' }
145
+ props: { searchOper: 'i_like' }
195
146
  }
196
147
  ]
197
148
 
@@ -216,19 +167,14 @@ class IntegrationLmd extends localize(i18next)(PageView) {
216
167
 
217
168
  const response = await client.query({
218
169
  query: gql`
219
- query lastMileDeliveries($filters: [Filter], $pagination: Pagination, $sortings: [Sorting]) {
170
+ query lastMileDeliveries($filters: [Filter!], $pagination: Pagination, $sortings: [Sorting!]) {
220
171
  lastMileDeliveries(filters: $filters, pagination: $pagination, sortings: $sortings) {
221
172
  items {
222
173
  id
223
174
  name
224
175
  platform
225
- clientId
226
- clientType
227
- clientName
228
- countryCode
229
176
  status
230
177
  updatedAt
231
- secretKey
232
178
  }
233
179
  total
234
180
  }
@@ -274,7 +220,7 @@ class IntegrationLmd extends localize(i18next)(PageView) {
274
220
 
275
221
  const response = await client.mutate({
276
222
  mutation: gql`
277
- mutation deleteLastMileDeliveries($ids: [String]!) {
223
+ mutation deleteLastMileDeliveries($ids: [String!]!) {
278
224
  deleteLastMileDeliveries(ids: $ids)
279
225
  }
280
226
  `,
@@ -289,32 +235,9 @@ class IntegrationLmd extends localize(i18next)(PageView) {
289
235
  }
290
236
  }
291
237
 
292
- async _updateLastMileDelivery() {
293
- let patches = this.dataGrist.exportPatchList({ flagName: 'cuFlag' })
294
-
295
- if (!patches?.length) {
296
- CustomAlert({
297
- title: i18next.t('text.nothing_changed'),
298
- text: i18next.t('text.there_is_nothing_to_save')
299
- })
300
- } else {
301
- const response = await client.mutate({
302
- mutation: gql`
303
- mutation updateMultipleLastMileDelivery($patches: [LastMileDeliveryPatch]!) {
304
- updateMultipleLastMileDelivery(patches: $patches) {
305
- name
306
- }
307
- }
308
- `,
309
- variables: { patches },
310
- context: gqlContext()
311
- })
312
-
313
- if (!response.errors) {
314
- this.dataGrist.fetch()
315
- this._showToast({ message: i18next.t('text.data_updated_successfully') })
316
- }
317
- }
238
+ _navigateToCreate() {
239
+ let context = gqlContext()
240
+ navigate(`integration-lmd-detail/new${buildDomainContext(context.headers['x-things-factory-domain'])}`)
318
241
  }
319
242
 
320
243
  _showToast({ type, message }) {
@@ -330,3 +253,11 @@ class IntegrationLmd extends localize(i18next)(PageView) {
330
253
  }
331
254
 
332
255
  customElements.define('integration-lmd', IntegrationLmd)
256
+
257
+ export function buildDomainContext(subdomain) {
258
+ let urlSearchParam = `?${buildGqlContext({
259
+ headers: { 'x-things-factory-domain': subdomain }
260
+ })}`
261
+
262
+ return urlSearchParam
263
+ }