@antscorp/antsomi-ui 1.3.5-beta.741 → 1.3.5-beta.743
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/es/components/molecules/MatchAnySelect/MatchesAnySelect.js +34 -7
- package/es/components/organism/Filter/providers/FilterProvider.js +0 -1
- package/es/constants/datetime.d.ts +65 -0
- package/es/constants/datetime.js +65 -0
- package/es/constants/index.d.ts +1 -0
- package/es/constants/index.js +1 -0
- package/es/constants/portal.d.ts +12 -0
- package/es/constants/portal.js +12 -0
- package/es/constants/queries.d.ts +1 -0
- package/es/constants/queries.js +2 -0
- package/es/locales/ja/google-sheet.json +50 -50
- package/es/locales/vi/google-sheet.json +1 -1
- package/es/models/Attribute.d.ts +28 -0
- package/es/models/Attribute.js +1 -0
- package/es/models/LoggedUser.d.ts +12 -0
- package/es/models/LoggedUser.js +1 -0
- package/es/providers/AppConfigProvider/contexts/index.js +7 -0
- package/es/queries/User/index.d.ts +8 -0
- package/es/queries/User/index.js +13 -1
- package/es/queries/index.d.ts +1 -0
- package/es/queries/index.js +1 -0
- package/es/services/User/index.d.ts +8 -0
- package/es/services/User/index.js +35 -0
- package/es/types/date.d.ts +9 -0
- package/es/types/date.js +1 -0
- package/es/types/index.d.ts +1 -0
- package/es/types/index.js +1 -0
- package/es/utils/attribute.d.ts +21 -0
- package/es/utils/attribute.js +38 -0
- package/es/utils/date.d.ts +7 -0
- package/es/utils/date.js +60 -1
- package/es/utils/index.d.ts +2 -0
- package/es/utils/index.js +2 -0
- package/es/utils/portal.d.ts +11 -0
- package/es/utils/portal.js +84 -0
- package/package.json +2 -2
|
@@ -45,6 +45,7 @@ const matchesAnyInitialState = {
|
|
|
45
45
|
selectedItems: [],
|
|
46
46
|
selectedTreeData: [],
|
|
47
47
|
isShowLoadMoreEl: false,
|
|
48
|
+
expandedKeys: [],
|
|
48
49
|
selectedExpandedKeys: [],
|
|
49
50
|
};
|
|
50
51
|
const { t } = i18nInstance;
|
|
@@ -55,7 +56,7 @@ export function MatchesAny(props) {
|
|
|
55
56
|
// State
|
|
56
57
|
const [state, setState] = useState(matchesAnyInitialState);
|
|
57
58
|
// Variables
|
|
58
|
-
const { selectedItems, selectedTreeData, isShowLoadMoreEl, selectedExpandedKeys } = state;
|
|
59
|
+
const { selectedItems, selectedTreeData, isShowLoadMoreEl, expandedKeys, selectedExpandedKeys } = state;
|
|
59
60
|
const _a = listEmptyProps || {}, { icon: listEmptyIcon = React.createElement(LongerIcon, null), description: listEmptyDescription = (React.createElement("div", { dangerouslySetInnerHTML: { __html: t(translations.matchesAnySelect.noData) } })) } = _a, restListEmptyProps = __rest(_a, ["icon", "description"]);
|
|
60
61
|
const _b = selectedListEmptyProps || {}, { description: selectedListEmptyDescription = t(translations.global.selectItemsFromList).toString(), icon: selectedListEmptyIcon = React.createElement(DataIcon, { color: globalToken === null || globalToken === void 0 ? void 0 : globalToken.bw5, size: 48 }) } = _b, restSelectedListEmptyProps = __rest(_b, ["description", "icon"]);
|
|
61
62
|
// Refs
|
|
@@ -84,6 +85,7 @@ export function MatchesAny(props) {
|
|
|
84
85
|
setTimeout(() => {
|
|
85
86
|
setState(prev => (Object.assign(Object.assign({}, prev), { isShowLoadMoreEl: true })));
|
|
86
87
|
}, 500);
|
|
88
|
+
setState(prev => (Object.assign(Object.assign({}, prev), { expandedKeys: items === null || items === void 0 ? void 0 : items.map(item => item.key) })));
|
|
87
89
|
}
|
|
88
90
|
}, [items]);
|
|
89
91
|
useDeepCompareEffect(() => {
|
|
@@ -188,8 +190,8 @@ export function MatchesAny(props) {
|
|
|
188
190
|
React.createElement(Icon, { type: `icon-ants-${onSelectItem ? 'double-arrow-up' : 'remove-slim'}`, size: 11 })))));
|
|
189
191
|
}, [customItemRenders, renderExtraValues, renderItemError]);
|
|
190
192
|
// Memos
|
|
191
|
-
const { treeData
|
|
192
|
-
var _a;
|
|
193
|
+
const { treeData } = useDeepCompareMemo(() => {
|
|
194
|
+
var _a, _b, _c, _d;
|
|
193
195
|
const { results, matchedParents } = recursiveSearchItems({
|
|
194
196
|
list: items || [],
|
|
195
197
|
searchKeys: ['title', 'key'],
|
|
@@ -228,6 +230,29 @@ export function MatchesAny(props) {
|
|
|
228
230
|
className: 'load-more-node',
|
|
229
231
|
disabled: true,
|
|
230
232
|
});
|
|
233
|
+
// If search value is empty, then expand all items
|
|
234
|
+
let newExpandedKeys = [];
|
|
235
|
+
if (!searchValue) {
|
|
236
|
+
// Expand all items
|
|
237
|
+
newExpandedKeys = (items === null || items === void 0 ? void 0 : items.map(item => item.key)) || [];
|
|
238
|
+
}
|
|
239
|
+
else {
|
|
240
|
+
// If search value is not empty, then only expand the matched parents
|
|
241
|
+
// of the search result
|
|
242
|
+
if (!isExternalSearch) {
|
|
243
|
+
// Expand the matched parents of the search result
|
|
244
|
+
newExpandedKeys =
|
|
245
|
+
((_c = (_b = flatTree(matchedParents, 'children')) === null || _b === void 0 ? void 0 : _b.filter(item => !!item.children)) === null || _c === void 0 ? void 0 : _c.map(item => item.key)) || [];
|
|
246
|
+
}
|
|
247
|
+
// If search value is not empty and is external search, then expand all items
|
|
248
|
+
// that have children
|
|
249
|
+
if (isExternalSearch) {
|
|
250
|
+
// Expand all items that have children
|
|
251
|
+
newExpandedKeys =
|
|
252
|
+
((_d = flatTree(items, 'children')) === null || _d === void 0 ? void 0 : _d.filter(item => !!item.children).map(item => item.key)) || [];
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
setState(prev => (Object.assign(Object.assign({}, prev), { expandedKeys: newExpandedKeys })));
|
|
231
256
|
return { treeData, matchedParents };
|
|
232
257
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
233
258
|
}, [items, searchValue, selectedItems, groupSelectProps, onChangeSearch]);
|
|
@@ -236,6 +261,10 @@ export function MatchesAny(props) {
|
|
|
236
261
|
const flattenTreeData = flatTree(treeData, 'children');
|
|
237
262
|
return !(flattenTreeData === null || flattenTreeData === void 0 ? void 0 : flattenTreeData.some(item => !item.disabled));
|
|
238
263
|
}, [treeData]);
|
|
264
|
+
// Select tree key for force hard rerender tree when items not full (< 15 items) for handle load more
|
|
265
|
+
// We use the length of items as key to force rerender tree when items length change
|
|
266
|
+
// This is to fix the issue load more not called when items length is less than 15
|
|
267
|
+
const selectTreeKey = useDeepCompareMemo(() => { var _a; return ((((_a = flatTree(items, 'children', 1)) === null || _a === void 0 ? void 0 : _a.length) || 0) < 15 ? `${(items === null || items === void 0 ? void 0 : items.length) || 0}` : ''); }, [items]);
|
|
239
268
|
const isDisableApply = useDeepCompareMemo(() => isEmpty(selectedTreeData), [selectedTreeData]);
|
|
240
269
|
const onSelectAll = () => {
|
|
241
270
|
const flattenTreeData = flatTree(treeData, 'children').filter(item => !item.children && !item.disabled);
|
|
@@ -276,15 +305,13 @@ export function MatchesAny(props) {
|
|
|
276
305
|
React.createElement(Flex, { align: "center", gap: 10 },
|
|
277
306
|
renderExtraValueLabels(),
|
|
278
307
|
React.createElement(TextButton, { disabled: isDisableSelectAll, onClick: onSelectAll }, t(translations.global.selectAll).toString()))),
|
|
279
|
-
React.createElement(Spin, { spinning: loading }, (treeData === null || treeData === void 0 ? void 0 : treeData.length) > 1 ? (React.createElement(StyledTree, { key:
|
|
280
|
-
? matchedParents.map(item => item.key)
|
|
281
|
-
: items === null || items === void 0 ? void 0 : items.map(item => item.key), selectable: false, treeData: treeData, switcherIcon: props => (React.createElement(Icon, { type: "icon-ants-caret-down", style: {
|
|
308
|
+
React.createElement(Spin, { spinning: loading }, (treeData === null || treeData === void 0 ? void 0 : treeData.length) > 1 ? (React.createElement(StyledTree, { key: selectTreeKey, expandedKeys: expandedKeys, selectable: false, treeData: treeData, switcherIcon: props => (React.createElement(Icon, { type: "icon-ants-caret-down", style: {
|
|
282
309
|
transform: props.expanded ? 'rotate(0)' : 'rotate(-90deg)',
|
|
283
310
|
transition: 'transform 0.3s ease',
|
|
284
311
|
}, color: globalToken === null || globalToken === void 0 ? void 0 : globalToken.bw8 })), titleRender: (item) => isShowLoadMoreEl && item.isLoadMore ? (React.createElement("div", { ref: loadMoreRef })) : (renderItemNodeTitle({
|
|
285
312
|
item,
|
|
286
313
|
onSelectItem,
|
|
287
|
-
})), height: 396 })) : (
|
|
314
|
+
})), height: 396, onExpand: expandedKeys => setState(prev => (Object.assign(Object.assign({}, prev), { expandedKeys }))) })) : (
|
|
288
315
|
/**
|
|
289
316
|
* If search value is not empty and no listEmpty props show no results matches key word message empty in case data is empty
|
|
290
317
|
*/
|
|
@@ -19,7 +19,6 @@ import { createFilterStore } from '../store/FilterStore';
|
|
|
19
19
|
import { useDeepCompareEffect } from '@antscorp/antsomi-ui/es/hooks';
|
|
20
20
|
export const FilterProvider = props => {
|
|
21
21
|
const { children } = props, restOfProps = __rest(props, ["children"]);
|
|
22
|
-
console.log('🚀 ~ restOfProps:', restOfProps);
|
|
23
22
|
const storeRef = useRef();
|
|
24
23
|
if (!storeRef.current) {
|
|
25
24
|
storeRef.current = createFilterStore(restOfProps);
|
|
@@ -1,3 +1,68 @@
|
|
|
1
|
+
export declare const PORTAL_MAP_DATE: {
|
|
2
|
+
en: {
|
|
3
|
+
'MM/DD/YYYY': {
|
|
4
|
+
long: string;
|
|
5
|
+
medium: string;
|
|
6
|
+
short: string;
|
|
7
|
+
};
|
|
8
|
+
'MM/YYYY': {
|
|
9
|
+
long: string;
|
|
10
|
+
medium: string;
|
|
11
|
+
short: string;
|
|
12
|
+
};
|
|
13
|
+
'DD/MM/YYYY': {
|
|
14
|
+
long: string;
|
|
15
|
+
medium: string;
|
|
16
|
+
short: string;
|
|
17
|
+
};
|
|
18
|
+
};
|
|
19
|
+
vi: {
|
|
20
|
+
'MM/DD/YYYY': {
|
|
21
|
+
long: string;
|
|
22
|
+
medium: string;
|
|
23
|
+
short: string;
|
|
24
|
+
};
|
|
25
|
+
'MM/YYYY': {
|
|
26
|
+
long: string;
|
|
27
|
+
medium: string;
|
|
28
|
+
short: string;
|
|
29
|
+
};
|
|
30
|
+
'DD/MM/YYYY': {
|
|
31
|
+
long: string;
|
|
32
|
+
medium: string;
|
|
33
|
+
short: string;
|
|
34
|
+
};
|
|
35
|
+
};
|
|
36
|
+
ja: {
|
|
37
|
+
'MM/DD/YYYY': {
|
|
38
|
+
long: string;
|
|
39
|
+
medium: string;
|
|
40
|
+
short: string;
|
|
41
|
+
};
|
|
42
|
+
'MM/YYYY': {
|
|
43
|
+
long: string;
|
|
44
|
+
medium: string;
|
|
45
|
+
short: string;
|
|
46
|
+
};
|
|
47
|
+
'DD/MM/YYYY': {
|
|
48
|
+
long: string;
|
|
49
|
+
medium: string;
|
|
50
|
+
short: string;
|
|
51
|
+
};
|
|
52
|
+
};
|
|
53
|
+
};
|
|
54
|
+
export declare const PORTAL_MAP_TIME: {
|
|
55
|
+
'12': {
|
|
56
|
+
long: string;
|
|
57
|
+
medium: string;
|
|
58
|
+
short: string;
|
|
59
|
+
};
|
|
60
|
+
'24': {
|
|
61
|
+
long: string;
|
|
62
|
+
medium: string;
|
|
63
|
+
short: string;
|
|
64
|
+
};
|
|
65
|
+
};
|
|
1
66
|
export declare const TIME_ZONES: {
|
|
2
67
|
label: string;
|
|
3
68
|
value: string;
|
package/es/constants/datetime.js
CHANGED
|
@@ -1,3 +1,68 @@
|
|
|
1
|
+
export const PORTAL_MAP_DATE = {
|
|
2
|
+
en: {
|
|
3
|
+
'MM/DD/YYYY': {
|
|
4
|
+
long: 'MMMM DD, YYYY',
|
|
5
|
+
medium: 'MMM DD, YYYY',
|
|
6
|
+
short: 'MM/DD/YYYY',
|
|
7
|
+
},
|
|
8
|
+
'MM/YYYY': {
|
|
9
|
+
long: 'MMMM YYYY',
|
|
10
|
+
medium: 'MMM YYYY',
|
|
11
|
+
short: 'MMM YYYY',
|
|
12
|
+
},
|
|
13
|
+
'DD/MM/YYYY': {
|
|
14
|
+
long: 'DD MMMM, YYYY',
|
|
15
|
+
medium: 'DD MMM YYYY',
|
|
16
|
+
short: 'DD/MM/YYYY',
|
|
17
|
+
},
|
|
18
|
+
},
|
|
19
|
+
vi: {
|
|
20
|
+
'MM/DD/YYYY': {
|
|
21
|
+
long: '[Ngày] DD [tháng] MM, YYYY',
|
|
22
|
+
medium: '[Ngày] DD [thg] MM, YYYY',
|
|
23
|
+
short: 'DD/MM/YYYY',
|
|
24
|
+
},
|
|
25
|
+
'MM/YYYY': {
|
|
26
|
+
long: '[Tháng] MM YYYY',
|
|
27
|
+
medium: '[Thg] MM YYYY',
|
|
28
|
+
short: '[Thg] MM YYYY',
|
|
29
|
+
},
|
|
30
|
+
'DD/MM/YYYY': {
|
|
31
|
+
long: '[Ngày] DD [tháng] MM, YYYY',
|
|
32
|
+
medium: '[Ngày] DD [thg] MM, YYYY',
|
|
33
|
+
short: 'DD/MM/YYYY',
|
|
34
|
+
},
|
|
35
|
+
},
|
|
36
|
+
ja: {
|
|
37
|
+
'MM/DD/YYYY': {
|
|
38
|
+
long: 'YYYY[年]MM[月]dd[日]',
|
|
39
|
+
medium: 'YYYY/MM/DD',
|
|
40
|
+
short: 'YYYY/MM/DD',
|
|
41
|
+
},
|
|
42
|
+
'MM/YYYY': {
|
|
43
|
+
long: 'YYYY[年]MM[月]',
|
|
44
|
+
medium: 'YYYY[年]MM[月]',
|
|
45
|
+
short: 'YYYY[年]MM[月]',
|
|
46
|
+
},
|
|
47
|
+
'DD/MM/YYYY': {
|
|
48
|
+
long: 'YYYY[年]MM[月]dd[日]',
|
|
49
|
+
medium: 'YYYY/MM/dd',
|
|
50
|
+
short: 'YYYY/MM/dd',
|
|
51
|
+
},
|
|
52
|
+
},
|
|
53
|
+
};
|
|
54
|
+
export const PORTAL_MAP_TIME = {
|
|
55
|
+
'12': {
|
|
56
|
+
long: 'hh:mm:ss.SSS a O',
|
|
57
|
+
medium: 'hh:mm:ss.SSS a',
|
|
58
|
+
short: 'hh:mm a',
|
|
59
|
+
},
|
|
60
|
+
'24': {
|
|
61
|
+
long: 'HH:mm:ss.SSS O',
|
|
62
|
+
medium: 'HH:mm:ss.SSS',
|
|
63
|
+
short: 'HH:mm',
|
|
64
|
+
},
|
|
65
|
+
};
|
|
1
66
|
export const TIME_ZONES = [
|
|
2
67
|
{
|
|
3
68
|
label: "Visitor's Local Time",
|
package/es/constants/index.d.ts
CHANGED
package/es/constants/index.js
CHANGED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export declare const PORTAL_KEYS: {
|
|
2
|
+
CURRENCY: string;
|
|
3
|
+
USER_LANGUAGE: string;
|
|
4
|
+
PORTAL_LANGUAGE: string;
|
|
5
|
+
TIME_ZONE: string;
|
|
6
|
+
CURRENCY_FORMAT: string;
|
|
7
|
+
DATE_TIME_FORMAT: string;
|
|
8
|
+
DATE_TIME_FORMAT_LONG: string;
|
|
9
|
+
NUMBER_FORMAT: string;
|
|
10
|
+
PERCENTAGE_FORMAT: string;
|
|
11
|
+
VERSION: string;
|
|
12
|
+
};
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export const PORTAL_KEYS = {
|
|
2
|
+
CURRENCY: 'p_currency',
|
|
3
|
+
USER_LANGUAGE: 'user_language',
|
|
4
|
+
PORTAL_LANGUAGE: 'p_language',
|
|
5
|
+
TIME_ZONE: 'p_timezone',
|
|
6
|
+
CURRENCY_FORMAT: 'p_f_currency',
|
|
7
|
+
DATE_TIME_FORMAT: 'p_f_datetime',
|
|
8
|
+
DATE_TIME_FORMAT_LONG: 'p_f_longdatetime',
|
|
9
|
+
NUMBER_FORMAT: 'p_f_number',
|
|
10
|
+
PERCENTAGE_FORMAT: 'p_f_percentage',
|
|
11
|
+
VERSION: '_ver',
|
|
12
|
+
};
|
package/es/constants/queries.js
CHANGED
|
@@ -32,8 +32,8 @@
|
|
|
32
32
|
"_ACT_CANCEL": "キャンセル",
|
|
33
33
|
"_ACT_CHANGE": "変化",
|
|
34
34
|
"_ACT_CHANGE_ASSIGN_GROUP": "割り当てグループの変更",
|
|
35
|
-
"_ACT_CHANGE_FORMAT": "
|
|
36
|
-
"_ACT_CHANGE_PORTAL": "
|
|
35
|
+
"_ACT_CHANGE_FORMAT": "フォーマットを変更する",
|
|
36
|
+
"_ACT_CHANGE_PORTAL": "ポータルの変更",
|
|
37
37
|
"_ACT_CHANGE_TEMPLATE": "テンプレートの変更",
|
|
38
38
|
"_ACT_CHART_TYPE": "グラフの種類",
|
|
39
39
|
"_ACT_CHOOSE_FILE_UPLOAD": "アップロードする画像を選択してください",
|
|
@@ -47,7 +47,7 @@
|
|
|
47
47
|
"_ACT_COPY_TO_CLIPBOARD": "クリップボードにコピー",
|
|
48
48
|
"_ACT_CREATE": "作成する",
|
|
49
49
|
"_ACT_CREATE_ASSIGN_ROLE": "役割の作成と割り当て",
|
|
50
|
-
"_ACT_CREATE_NEW_EVENT_ACTION": "
|
|
50
|
+
"_ACT_CREATE_NEW_EVENT_ACTION": "新しいイベントアクションを作成する",
|
|
51
51
|
"_ACT_CREATE_NEW_EVENT_CATEGORY": "新しいイベント カテゴリを作成する",
|
|
52
52
|
"_ACT_CREATE_NEW_MODEL": "新しいモデルを作成する",
|
|
53
53
|
"_ACT_CUSTOMER_SEGMENT": "顧客セグメント",
|
|
@@ -66,7 +66,7 @@
|
|
|
66
66
|
"_ACT_EXPORT": "輸出",
|
|
67
67
|
"_ACT_FORECAST": "予報",
|
|
68
68
|
"_TILT_FORECAST": "の予測結果",
|
|
69
|
-
"_SEG_RESULT_MESS_1": "
|
|
69
|
+
"_SEG_RESULT_MESS_1": "選択した時間範囲が Time to Live の範囲外であるため、データが不十分です",
|
|
70
70
|
"_BTN_CREATE_SEG": "セグメントの作成",
|
|
71
71
|
"_ACT_GO_BACK": "戻る",
|
|
72
72
|
"_ACT_HAVE_ATTRIBUTE": "属性を持つ",
|
|
@@ -364,7 +364,7 @@
|
|
|
364
364
|
"_DECRYPT_DURATION_PAGE_REFRESH": "ページの更新",
|
|
365
365
|
"_DECRYPT_DURATION_TIME_OUT_30": "タイムアウト30分",
|
|
366
366
|
"_DELIVERY_ALGORITHM_RANDOMIZATION": "ランダム化",
|
|
367
|
-
"_DESTINATION_DESIGN_OPTION_EXIST": "
|
|
367
|
+
"_DESTINATION_DESIGN_OPTION_EXIST": "既存のデザインをロード",
|
|
368
368
|
"_DESTINATION_DESIGN_OPTION_EXIST_INTRO": "別のキャンペーンのデザインをコピーする",
|
|
369
369
|
"_DESTINATION_DESIGN_OPTION_SCRATCH": "ゼロからデザインする",
|
|
370
370
|
"_DESTINATION_DESIGN_OPTION_SCRATCH_INTRO": "キャンペーンをカスタムデザインする",
|
|
@@ -414,17 +414,17 @@
|
|
|
414
414
|
"_EVENT_CLICK_WEB_PUSH": "{{customer_name}} さんが Journey {{journey_name}} からのウェブ プッシュ通知をクリックしました",
|
|
415
415
|
"_EVENT_CLICK_ZALO_CHAT": "{{customer_name}} さんが Journey {{journey_name}} からの Zalo メッセージをクリックしました",
|
|
416
416
|
"_EVENT_DES_ADD_TO_CART_PRODUCT": "{{customer_name}} さんが商品 {{product_name}} をショッピング カートに追加しました",
|
|
417
|
-
"_EVENT_DES_BROWSING_PRODUCT_LIST_FILTER": "
|
|
417
|
+
"_EVENT_DES_BROWSING_PRODUCT_LIST_FILTER": "商品をフィルタリングした後に返された結果を表示した {{customer_name}} さん",
|
|
418
418
|
"_EVENT_DES_BROWSING_PRODUCT_SEARCH": "{{customer_name}} さんがキーワード {{keyword}} の検索から返された商品リストを閲覧しました",
|
|
419
419
|
"_EVENT_DES_CAILL_IN_CALL": "{{customer_name}} がカスタマー サービスに電話しました",
|
|
420
420
|
"_EVENT_DES_CALL_OUT_CALL": "{{customer_name}} がカスタマー サービスから電話を受けました",
|
|
421
421
|
"_EVENT_DES_CANCEL_ORDER": "{{customer_name}} が注文 {{order_id}} をキャンセルしました",
|
|
422
|
-
"_EVENT_DES_CHAT_CONVERSATION": "{{customer_name}}
|
|
422
|
+
"_EVENT_DES_CHAT_CONVERSATION": "{{customer_name}} が {{channel_name}} 経由でカスタマー サービスとチャットしました",
|
|
423
423
|
"_EVENT_DES_CHECKOUT_CART_PRODUCT": "{{customer_name}} が注文プロセスを開始しました (トランザクションが作成されました)",
|
|
424
424
|
"_EVENT_DES_CLICK_ADVERTISING": "{{customer_name}} さんがキャンペーン {{campaign_name}} をクリックしました",
|
|
425
425
|
"_EVENT_DES_CLICK_EMAIL_ADVERTISING": "{{customer_name}} が広告 {{advertising_name}} のメールをクリックしました",
|
|
426
426
|
"_EVENT_DES_CLICK_PRODUCT": "{{customer_name}} さんが商品 {{product_name}} をクリックしました",
|
|
427
|
-
"_EVENT_DES_CLICK_TRACKING_ADVERTISING": "{{customer_name}}
|
|
427
|
+
"_EVENT_DES_CLICK_TRACKING_ADVERTISING": "{{customer_name}} がトラッキング広告 {{advertising_name}} をクリックしました",
|
|
428
428
|
"_EVENT_DES_IDENTIFY_USER": "匿名訪問者プロファイル {{user_id}} は、この顧客プロファイルに関連付けられていました。",
|
|
429
429
|
"_EVENT_DES_IMPRESSION_ADVERTISING": "キャンペーン {{campaign_name}} は {{customer_name}} に送信されました",
|
|
430
430
|
"_EVENT_DES_PURCHASE_TRANSACTION": "{{customer_name}} が、{{num_of_products}} 個の製品 {{store_link}} のトランザクション購入 ID {{order_id}} を実行しました",
|
|
@@ -809,7 +809,7 @@
|
|
|
809
809
|
"_NOTIFICATION_INVALID_INPUT": "無効な入力",
|
|
810
810
|
"_NOTIFICATION_NAMESAKE": "この名前はすでに存在していました",
|
|
811
811
|
"_NOTIFICATION_NEW_USER_EMAIL": "このメールは登録されていません。まず、新しいアカウントを登録するための情報を入力してください。",
|
|
812
|
-
"_NOTIFICATION_SAME_CODE": "
|
|
812
|
+
"_NOTIFICATION_SAME_CODE": "このコードは使用されませんでした。別のコードを使用してください",
|
|
813
813
|
"_NOTIFICATION_SAVED_CHANGES_SUCCESS": "アップデートが保存されました!",
|
|
814
814
|
"_NOTIFICATION_SUCCESS": "成功",
|
|
815
815
|
"_OPERATOR_AFTER_DATE": "デート後",
|
|
@@ -860,7 +860,7 @@
|
|
|
860
860
|
"_RECOMD_FACTORIZATION_VIEW": "因数分解ビューイベント",
|
|
861
861
|
"_RECOMD_ITEM_SIMILARITY_PURCHASE": "アイテム類似購入イベント",
|
|
862
862
|
"_RECOMD_ITEM_SIMILARITY_VIEW": "アイテム類似性表示イベント",
|
|
863
|
-
"_RECOMD_NO_PRODUCT": "
|
|
863
|
+
"_RECOMD_NO_PRODUCT": "推奨される製品はありません。",
|
|
864
864
|
"_RECOMD_RANK_FACTORIZATION_PURCHASE": "ランク因数分解購入イベント",
|
|
865
865
|
"_RECOMD_RANK_FACTORIZATION_VIEW": "ランク因数分解ビューイベント",
|
|
866
866
|
"_RENDER_FORMAT": "表示形式",
|
|
@@ -917,7 +917,7 @@
|
|
|
917
917
|
"_TAB_INFORMATION_FIELD": "情報フィールド",
|
|
918
918
|
"_TAB_JOURNEY": "旅",
|
|
919
919
|
"_TAB_METRIC": "メトリック",
|
|
920
|
-
"_TAB_MODEL_DIAGRAM": "
|
|
920
|
+
"_TAB_MODEL_DIAGRAM": "図",
|
|
921
921
|
"_TAB_MODEL_FIELD": "フィールド",
|
|
922
922
|
"_TAB_OBECT_REFERENCE": "オブジェクトリファレンス",
|
|
923
923
|
"_TAB_OBJECT_ATTRIBUTE": "属性",
|
|
@@ -1010,7 +1010,7 @@
|
|
|
1010
1010
|
"_TITL_COMPRESS_FILE": "ファイルを圧縮する",
|
|
1011
1011
|
"_TITL_COMPUTE_SCHEDULE": "コンピューティングスケジュール",
|
|
1012
1012
|
"_TITL_COMPUTE_TIME_RANGE": "計算時間範囲",
|
|
1013
|
-
"_TITL_COMPUTE_WITH_CONDITION": "
|
|
1013
|
+
"_TITL_COMPUTE_WITH_CONDITION": "以下の条件で計算します",
|
|
1014
1014
|
"_TITL_COMPUTED_ATTR_TYPE": "計算された属性のタイプ",
|
|
1015
1015
|
"_TITL_CONFIGURE_FIELD": "フィールドの構成",
|
|
1016
1016
|
"_TITL_CONFIGURE_LAYOUT_VARIABLE": "レイアウト変数を設定する",
|
|
@@ -1079,7 +1079,7 @@
|
|
|
1079
1079
|
"_TITL_EVENT_ACTION_NAME": "イベントアクション名",
|
|
1080
1080
|
"_TITL_EVENT_ATTRIBUTE": "イベント属性",
|
|
1081
1081
|
"_TITL_EVENT_CATEGORY": "イベントカテゴリー",
|
|
1082
|
-
"_TITL_EVENT_CATEGORY_CODE": "
|
|
1082
|
+
"_TITL_EVENT_CATEGORY_CODE": "イベントカテゴリコード",
|
|
1083
1083
|
"_TITL_EVENT_CATEGORY_NAME": "イベントカテゴリ名",
|
|
1084
1084
|
"_TITL_EVENT_INFO": "イベント情報",
|
|
1085
1085
|
"_TITL_EVENT_INTERNAL_NAME": "イベントの内部名",
|
|
@@ -1102,7 +1102,7 @@
|
|
|
1102
1102
|
"_TITL_FIXED": "修理済み",
|
|
1103
1103
|
"_TITL_FOREIGN_OBJECT": "異物",
|
|
1104
1104
|
"_TITL_FREQUENCY": "頻度",
|
|
1105
|
-
"_TITL_FREQUENCY_CAPPING": "
|
|
1105
|
+
"_TITL_FREQUENCY_CAPPING": "フリークエンシー キャップ",
|
|
1106
1106
|
"_TITL_FROM_PAGE": "ページから",
|
|
1107
1107
|
"_TITL_FUNCTION": "関数",
|
|
1108
1108
|
"_TITL_GENERAL": "一般的な",
|
|
@@ -1208,7 +1208,7 @@
|
|
|
1208
1208
|
"_TITL_ORIGINAL_NAME": "オリジナル",
|
|
1209
1209
|
"_TITL_PAGE_DOWNLOAD": "ページのダウンロード",
|
|
1210
1210
|
"_TITL_PERCENTAGE": "パーセンテージ",
|
|
1211
|
-
"_TITL_PERCENTAGE_SETTING": "
|
|
1211
|
+
"_TITL_PERCENTAGE_SETTING": "パーセント設定",
|
|
1212
1212
|
"_TITL_PERFORM_EVENT": "イベントを行う",
|
|
1213
1213
|
"_TITL_PERSONALIZATION_CODE": "パーソナライゼーションコード",
|
|
1214
1214
|
"_TITL_PERSONALIZATION_TAG": "パーソナライゼーションタグ",
|
|
@@ -1326,7 +1326,7 @@
|
|
|
1326
1326
|
"_USER_GUIDE_AUDIDENCE_PARENT_NODE": "親ノードからの {{percent}} 視聴者",
|
|
1327
1327
|
"_USER_GUIDE_CATALOG_CLOUD": "データをクラウド アプリから当社のシステムに効果的に同期すると、すべてのフラグメント データを相互接続して、ビジネス運営の 1 つの詳細な概要を得ることができます。",
|
|
1328
1328
|
"_USER_GUIDE_CATALOG_MOBILE_APP": "ビジネス モバイル アプリをデータ ソースとして接続し、ユーザーが製品やアプリとどのようにやり取りしているかを確認します。",
|
|
1329
|
-
"_USER_GUIDE_CATALOG_SERVER": "
|
|
1329
|
+
"_USER_GUIDE_CATALOG_SERVER": "お客様のサーバーから当社のシステムにデータを直接送信することで、当社の分析ツールの多くを使用して顧客と業績をより深く理解できるようになります。",
|
|
1330
1330
|
"_USER_GUIDE_CATALOG_WEBSITE": "ビジネス Web サイトをデータ ソースとして接続し、製品に対するユーザーの意図に関する驚くべき洞察を発見します。",
|
|
1331
1331
|
"_USER_GUIDE_CHOOOSE_ATTR_DISPLAY": "顧客/訪問者の各プロファイルに表示される属性を選択します",
|
|
1332
1332
|
"_USER_GUIDE_CHOOSE_EVENT_ATTRIBUTE_OBJECT": "イベント属性とオブジェクトの選択",
|
|
@@ -1347,7 +1347,7 @@
|
|
|
1347
1347
|
"_USER_GUIDE_EDIT_NODE": "ここで選択したノードのコンテンツを編集します",
|
|
1348
1348
|
"_USER_GUIDE_ENCRYPTED_INFO": "暗号化された情報",
|
|
1349
1349
|
"_USER_GUIDE_ENTER_VALUE": "値を入力してください",
|
|
1350
|
-
"_USER_GUIDE_EVENT_ATTR_OBJECT": "
|
|
1350
|
+
"_USER_GUIDE_EVENT_ATTR_OBJECT": "イベント属性とオブジェクトを選択する ",
|
|
1351
1351
|
"_USER_GUIDE_EVENT_TEMPLATE": "イベントテンプレートの選択",
|
|
1352
1352
|
"_USER_GUIDE_FOR_ASSIGN": "割り当て用",
|
|
1353
1353
|
"_USER_GUIDE_FOR_CREATE": "作成用",
|
|
@@ -1511,7 +1511,7 @@
|
|
|
1511
1511
|
"_TITL_USED_INFO": "使用されているコード情報 ",
|
|
1512
1512
|
"_TITL_PROMOTION_CODE": "プロモーションコード:",
|
|
1513
1513
|
"_TITL_ALLOCATED_TO_JOURNEY": "ジャーニーに割り当てられている:",
|
|
1514
|
-
"_TITL_ALLOCATED_TO_AUDIENCE": "
|
|
1514
|
+
"_TITL_ALLOCATED_TO_AUDIENCE": "視聴者に割り当てられる:",
|
|
1515
1515
|
"_ACT_MOVE_TO": "に移動します",
|
|
1516
1516
|
"_BOX_TITL_MOVE_CODE": "{{x}} 個のコードを別のプールに移動します ",
|
|
1517
1517
|
"_TITL_MOVE_TO_POOL": "プールに移動",
|
|
@@ -1527,7 +1527,7 @@
|
|
|
1527
1527
|
"_CODE_RULE_EMPTY": "無効なコードです!コードを空にすることはできません。",
|
|
1528
1528
|
"_CODE_RULE_INVALID_FORMAT": "aud_*、number_*、および sgmt_* 形式のコードはシステム用に予約されています。",
|
|
1529
1529
|
"_CODE_RULE_INVALID_FORMAT_EVT": "*_id 、 aud_* 、number_* および sgmt_* 形式のコードはシステム用に予約されています。",
|
|
1530
|
-
"_NAME_RULE_INVALID_CHARACTER": "名前が無効です!名前は文字 a ~ Z
|
|
1530
|
+
"_NAME_RULE_INVALID_CHARACTER": "名前が無効です!名前は文字 a ~ Z またはアンダースコアで始める必要があります。",
|
|
1531
1531
|
"_NAME_RULE_INVALID_MAX_LENGTH": "名前が無効です!名前は 255 文字以内です。",
|
|
1532
1532
|
"_NAME_RULE_EMPTY": "名前が無効です!名前を空にすることはできません。",
|
|
1533
1533
|
"_DELIVERY_STATUS_SENT": "送信済み",
|
|
@@ -1618,7 +1618,7 @@
|
|
|
1618
1618
|
"_TITL_PREPARE_REPORT": "レポートを準備する",
|
|
1619
1619
|
"_TITL_ENABLE_PARAMETER_FILTER": "パラメータフィルターを有効にする",
|
|
1620
1620
|
"_TITL_ENABLE_MASTER_FILTER": "マスターフィルターを有効にする",
|
|
1621
|
-
"_TITL_PPL_W_ACCESS": "
|
|
1621
|
+
"_TITL_PPL_W_ACCESS": "アクセスできる人",
|
|
1622
1622
|
"_TITL_PUBLIC_REPORT": "ポータルで公開",
|
|
1623
1623
|
"_TITL_FILTER_TYPE": "フィルターの種類",
|
|
1624
1624
|
"_TITL_DATA_SOURCE": "データソース",
|
|
@@ -1708,7 +1708,7 @@
|
|
|
1708
1708
|
"_TITL_VERSION": "バージョン",
|
|
1709
1709
|
"_TAB_DELIVERY_LOG": "配信ログ",
|
|
1710
1710
|
"_TAB_DETAIL": "詳細",
|
|
1711
|
-
"_TAB_DIAGRAM": "
|
|
1711
|
+
"_TAB_DIAGRAM": "図",
|
|
1712
1712
|
"_CODE_BUILD_CONTENT_ERROR": "ビルドコンテンツエラー",
|
|
1713
1713
|
"_CODE_MISSING_RECEIVER": "受信機がありません",
|
|
1714
1714
|
"_CODE_DESTINATION_FREQUENCY_CAPPING": "宛先フリークエンシー キャップに違反する",
|
|
@@ -1719,7 +1719,7 @@
|
|
|
1719
1719
|
"_TITL_TAG_ACTION_HISTORY_DETAIL": "行動履歴詳細",
|
|
1720
1720
|
"_TITL_TAG_SCHEDULE_HISTORY_DETAIL": "スケジュール履歴の詳細",
|
|
1721
1721
|
"_INFO_AD_ZONE_CODE": "ゾーンコード",
|
|
1722
|
-
"_STATE_COMPLETED": "
|
|
1722
|
+
"_STATE_COMPLETED": "完了しました",
|
|
1723
1723
|
"_STATE_END": "終わり",
|
|
1724
1724
|
"_STATE_EXIT_JOURNEY": "出口行程",
|
|
1725
1725
|
"_STATE_VIOLATE_TRIGGER_FC": "トリガーのフリークエンシー キャップに違反する",
|
|
@@ -1766,7 +1766,7 @@
|
|
|
1766
1766
|
"_PORTAL_LIMITATION_DES_COL_DELETE": "までに回復しない場合、コレクションは完全に削除されます",
|
|
1767
1767
|
"_PORTAL_LIMITATION_DES_BO_DISABLED": "データ オブジェクトは、次の場所で使用されない場合は無効になります。",
|
|
1768
1768
|
"_PORTAL_LIMITATION_DES_BO_ARCHIVED": "データオブジェクトは、使用されない場合はアーカイブされます。",
|
|
1769
|
-
"_PORTAL_LIMITATION_DES_BO_DELETE": "
|
|
1769
|
+
"_PORTAL_LIMITATION_DES_BO_DELETE": "次の期間に回復しない場合、データ オブジェクトは完全に削除されます",
|
|
1770
1770
|
"_PORTAL_LIMITATION_DES_ATTR_DISABLED": "で使用されない場合、属性は無効になります。 ",
|
|
1771
1771
|
"_PORTAL_LIMITATION_DES_ATTR_ARCHIVED": "属性が使用されない場合はアーカイブされます。",
|
|
1772
1772
|
"_PORTAL_LIMITATION_DES_ATTR_DELETE": "属性は、次の期間に回復しない場合は完全に削除されます。",
|
|
@@ -1777,7 +1777,7 @@
|
|
|
1777
1777
|
"_COMPUTATION_SEGMENT_PROPERTY_DELETED": "セグメントのプロパティで使用されているオブジェクトが存在しません",
|
|
1778
1778
|
"_COMPUTATION_ATTRIBUTE_PROPERTY_ARCHIVED": "属性のプロパティで使用されるオブジェクトはアーカイブされています",
|
|
1779
1779
|
"_COMPUTATION_ATTRIBUTE_PROPERTY_DELETED": "属性のプロパティで使用されているオブジェクトが存在しません",
|
|
1780
|
-
"_MEASURE_TYPE_UC_APPROXIMATE_DATASKETCHES": "
|
|
1780
|
+
"_MEASURE_TYPE_UC_APPROXIMATE_DATASKETCHES": "一意の数の概算 (データスケッチ)",
|
|
1781
1781
|
"_TITL_ASSOCIATE_UTM": "UTMと連携する",
|
|
1782
1782
|
"_TITL_PLANNING": "企画",
|
|
1783
1783
|
"_TITLE_PLAN_ALL_PLANS": "すべてのプラン",
|
|
@@ -1807,7 +1807,7 @@
|
|
|
1807
1807
|
"_USER_GUIDE_PLAN_PROCESSING": "処理...",
|
|
1808
1808
|
"_USER_GUIDE_MOVE_GROUP_INCLUDE": "人を含めるためにグループをここに移動します",
|
|
1809
1809
|
"_USER_GUIDE_MOVE_GROUP_EXCLUDE": "ユーザーを除外するにはグループをここに移動します",
|
|
1810
|
-
"_USER_GUIDE_NOTIFY_PROCESSING_SUCCESS": "{{セグメント名}}
|
|
1810
|
+
"_USER_GUIDE_NOTIFY_PROCESSING_SUCCESS": "{{セグメント名}}セグメントのデータ処理が完了しました",
|
|
1811
1811
|
"_USER_GUIDE_NOTIFY_PROCESSING_FAILT": "{{セグメント名}} セグメントのデータ処理に失敗しました",
|
|
1812
1812
|
"_TITLE_NOTIFY_HIDE": "隠れる",
|
|
1813
1813
|
"_TITLE_BTN_RECOMPUTED": "再計算された",
|
|
@@ -1865,7 +1865,7 @@
|
|
|
1865
1865
|
"_EVENT_SETTING_RECORD_IN_PROFILE": "訪問者/顧客プロファイルにイベント データを記録する",
|
|
1866
1866
|
"_WARN_SMS_DYNAMIC_CONTENT": "(文字数は、コンテンツに動的コンテンツまたはショートリンクが含まれる場合のみ参考用です)",
|
|
1867
1867
|
"_TITLE_CATALOG_DESTINATION_CHANNEL": "宛先チャンネル",
|
|
1868
|
-
"_TITLE_CATALOG_DESTINATION_CATALOGS": "
|
|
1868
|
+
"_TITLE_CATALOG_DESTINATION_CATALOGS": "宛先カタログ",
|
|
1869
1869
|
"_TITLE_CATALOG_ALL_CATALOGS": "すべてのカタログ",
|
|
1870
1870
|
"_TITLE_CATALOG_CATALOG_NAME": "カタログ名",
|
|
1871
1871
|
"_TITLE_CATALOG_DEFAULT_CATALOG": "デフォルトのカタログ",
|
|
@@ -1878,7 +1878,7 @@
|
|
|
1878
1878
|
"_USER_GUIDE_CATALOG_CONFIRM_DISABLE": "選択したカタログを無効にしてもよろしいですか?",
|
|
1879
1879
|
"_USER_GUIDE_CATALOG_CONFIRM_REMOVE": "選択したカタログを削除してもよろしいですか?",
|
|
1880
1880
|
"_USER_GUIDE_CATALOG_SELECT_CATALOG_INIT": "初期化するカタログを選択してください",
|
|
1881
|
-
"_USER_GUIDE_CATALOG_SELECT_CHANNEL": "
|
|
1881
|
+
"_USER_GUIDE_CATALOG_SELECT_CHANNEL": "選択された宛先チャンネル",
|
|
1882
1882
|
"_USER_GUIDE_CATALOG_SEARCH_CHANNEL": "宛先チャンネルの検索",
|
|
1883
1883
|
"_USER_GUIDE_CATALOG_SELECT_CATALOG": "厳選されたカタログ",
|
|
1884
1884
|
"_USER_GUIDE_CATALOG_SEARCH_CATALOG": "カタログを検索する",
|
|
@@ -1972,7 +1972,7 @@
|
|
|
1972
1972
|
"_WARN_COLL_WARN_TOTAL_CONTENT_RECOVER": "{{dynamic_collections}} {{static_collections}} の数が制限に達しました。\nコレクションを回復したい場合は、未使用のコレクションをアーカイブしてください。",
|
|
1973
1973
|
"_ERROR_MESS_COLL_COMPUTED_LIMIT": "この時間内に構築されるコレクションの数の制限に達しました。",
|
|
1974
1974
|
"_WARN_TITLE_COLL_COMPUTATIONAL_LIMIT": "警告収集の計算制限",
|
|
1975
|
-
"_WARN_COLL_COMPUTATIONAL_LIMIT": "
|
|
1975
|
+
"_WARN_COLL_COMPUTATIONAL_LIMIT": "現在、計算制限に達しているため、システムは次の有効な時間にこのコレクションを計算します。",
|
|
1976
1976
|
"_OPTION_SEGMENT_SCHEDULE_DETAILS_HOUR_AM": "{{x}} 時間ごとに {{HH:MM}} 時",
|
|
1977
1977
|
"_OPTION_SEGMENT_SCHEDULE_DETAILS_HOUR_PM": "{{x}} 時間ごとに 午後{{HH:MM}} 時",
|
|
1978
1978
|
"_OPTION_SEGMENT_SCHEDULE_DETAILS_DAY_AM": "{{x}}日ごとの {{HH:MM}} 時",
|
|
@@ -2098,7 +2098,7 @@
|
|
|
2098
2098
|
"_PREDICT_MODEL_NEW_CUSTOMERS": "新規のお客様",
|
|
2099
2099
|
"_PREDICT_MODEL_POTENTIAL_LOYALISTS": "潜在的なロイヤリスト",
|
|
2100
2100
|
"_PREDICT_MODEL_NEED_ATTENTION": "注意が必要です ",
|
|
2101
|
-
"_PREDICT_MODEL_VISUALIZATION_ERROR": "
|
|
2101
|
+
"_PREDICT_MODEL_VISUALIZATION_ERROR": "データを視覚化できない",
|
|
2102
2102
|
"_PREDICT_MODEL_VISUALIZATION_TIP": "購入金額の価値 ",
|
|
2103
2103
|
"_PREDICT_MODEL_LIMIT_EQUAL_TO": "に等しい",
|
|
2104
2104
|
"_PREDICT_MODEL_LIMIT_GREATER_THAN_OR_EQUAL_TO": "以上 ",
|
|
@@ -2262,7 +2262,7 @@
|
|
|
2262
2262
|
"_CHANNEL_DES_WEB_NOTI": "リアルタイムのメッセージを送信して Web サイト訪問者を引きつけ、タイムリーなインタラクションとコンバージョンを促進します",
|
|
2263
2263
|
"_CHANNEL_DES_APP_NOTI": "即時通知をモバイル アプリのみに送信し、即時のエンゲージメントとインタラクションを促進します",
|
|
2264
2264
|
"_CHANNEL_DES_EMAIL": "パーソナライズされたメッセージをユーザーの受信箱に直接配信し、ターゲットを絞ったコンテンツでのエンゲージメントとコンバージョンを促進します。",
|
|
2265
|
-
"_CHANNEL_DES_SMS": "
|
|
2265
|
+
"_CHANNEL_DES_SMS": "直接的かつ即時的なコミュニケーションを提供し、ユーザーのモバイルデバイスに到達して即時のエンゲージメントとインタラクションを実現します。",
|
|
2266
2266
|
"_CHANNEL_DES_SMART_INB": "プッシュ通知のコンテンツを一元管理して管理とエンゲージメントを合理化",
|
|
2267
2267
|
"_CHANNEL_DES_FB_MESS": "直接的な会話型のコミュニケーションを提供し、使い慣れたソーシャル メディア プラットフォームでユーザーを惹きつけます",
|
|
2268
2268
|
"_CHANNEL_DES_VIBER": "ダイレクト メッセージング機能を提供し、安全で使い慣れたソーシャル メディア プラットフォームでユーザーを魅了します。",
|
|
@@ -2363,7 +2363,7 @@
|
|
|
2363
2363
|
"_WEBPER_TEMP_OBJ_INLINE_5": "ソーシャルプルーフディスプレイ",
|
|
2364
2364
|
"_WEBPER_TEMP_OBJ_INLINE_6": "教育コンテンツ",
|
|
2365
2365
|
"_WEBPER_TEMP_OBJ_SLIDEIN_1": "リードマグネット",
|
|
2366
|
-
"_WEBPER_TEMP_OBJ_SLIDEIN_2": "
|
|
2366
|
+
"_WEBPER_TEMP_OBJ_SLIDEIN_2": "終了意図",
|
|
2367
2367
|
"_WEBPER_TEMP_OBJ_SLIDEIN_3": "コンテンツティーザー",
|
|
2368
2368
|
"_WEBPER_TEMP_OBJ_SLIDEIN_4": "アンケートと投票",
|
|
2369
2369
|
"_WEBPER_TEMP_OBJ_SLIDEIN_5": "ソーシャルプルーフディスプレイ",
|
|
@@ -2395,7 +2395,7 @@
|
|
|
2395
2395
|
"_OBJ_DES_WEB_1": "没入型のブラウジング体験に合わせてコンテンツを調整することで、セッションが長くなり、エンゲージメント指標が向上します",
|
|
2396
2396
|
"_OBJ_DES_WEB_2": "より多くのコンバージョンと売上を促進するために、ユーザーの興味やニーズに合った製品やコンテンツをユーザーに提示します。",
|
|
2397
2397
|
"_OBJ_DES_WEB_3": "視聴者とのより深いつながりを育み、ロイヤルティと維持率を高めます",
|
|
2398
|
-
"_OBJ_DES_WEB_4": "
|
|
2398
|
+
"_OBJ_DES_WEB_4": "それぞれの訪問者のインタラクションの価値を最大化するために、ユニークでパーソナライズされたオファーを提供します",
|
|
2399
2399
|
"_OBJ_DES_WEB_5": "ユーザーインタラクションを分析してコンテンツを洗練し、戦略をセグメント化し、Web サイトのレイアウトを最適化します。",
|
|
2400
2400
|
"_OBJ_DES_WEB_NOTI_1": "タイムリーな更新、プロモーション、アラートでユーザーに即座に連絡します",
|
|
2401
2401
|
"_OBJ_DES_WEB_NOTI_2": "新しいコンテンツ、製品リリース、または期間限定オファーをユーザーに通知することで、Web サイトへのトラフィックを促進します",
|
|
@@ -2416,42 +2416,42 @@
|
|
|
2416
2416
|
"_OBJ_DES_SMS_1": "時間制限のある更新、プロモーション、アラートでユーザーに即座に連絡します",
|
|
2417
2417
|
"_OBJ_DES_SMS_2": "ターゲットを絞ったプロモーションやオファーをブロードキャストして、エンゲージメントと販売を促進します",
|
|
2418
2418
|
"_OBJ_DES_SMS_3": "情報の再発行や登録確認など、迅速かつ便利なサポートを提供します",
|
|
2419
|
-
"_OBJ_DES_SMS_4": "
|
|
2419
|
+
"_OBJ_DES_SMS_4": "予定や予約のリマインダーと確認を送信してノーショーを減らします",
|
|
2420
2420
|
"_OBJ_DES_SMS_5": "注文確認、出荷通知、アカウント更新をリアルタイムで提供します",
|
|
2421
2421
|
"_OBJ_DES_SMART_INB_1": "通知を集約し、ユーザーがメッセージを 1 か所で簡単に表示および管理できるようにします。",
|
|
2422
|
-
"_OBJ_DES_SMART_INB_2": "
|
|
2422
|
+
"_OBJ_DES_SMART_INB_2": "プラットフォーム間で通知にアクセスし、操作するためのシームレスで直感的なインターフェイスを提供します。",
|
|
2423
2423
|
"_OBJ_DES_SMART_INB_3": "通知によるタイムリーな応答と対話を促進し、ユーザー エンゲージメントと満足度を最大化します",
|
|
2424
2424
|
"_OBJ_DES_SMART_INB_4": "Web プッシュやアプリ プッシュなどのさまざまなチャネルからの通知を統合し、ユーザーとの一貫性のある一貫したコミュニケーションを確保します。",
|
|
2425
2425
|
"_OBJ_DES_FB_MESS_1": "ターゲットを絞ったプロモーションやオファーをブロードキャストして、エンゲージメントと販売を促進します",
|
|
2426
2426
|
"_OBJ_DES_FB_MESS_2": "鮮やかなメッセージ テンプレートを使用してタイムリーで関連性のある更新を提供します",
|
|
2427
|
-
"_OBJ_DES_FB_MESS_3": "
|
|
2428
|
-
"_OBJ_DES_FB_MESS_4": "
|
|
2427
|
+
"_OBJ_DES_FB_MESS_3": "タイムリーかつ効率的な顧客サポートを提供し、メッセンジャー内で直接問い合わせに対応し、問題を解決します。",
|
|
2428
|
+
"_OBJ_DES_FB_MESS_4": "予定や予約のリマインダーと確認を送信してノーショーを減らします",
|
|
2429
2429
|
"_OBJ_DES_FB_MESS_5": "アンケートやインタラクティブなテンプレートを通じて、ユーザーから貴重な洞察とフィードバックを直接収集します",
|
|
2430
2430
|
"_OBJ_DES_VIBER_1": "ターゲットを絞ったプロモーションやオファーをブロードキャストして、エンゲージメントと販売を促進します",
|
|
2431
2431
|
"_OBJ_DES_VIBER_2": "鮮やかなメッセージ テンプレートを使用してタイムリーで関連性のある更新を提供します",
|
|
2432
|
-
"_OBJ_DES_VIBER_3": "
|
|
2432
|
+
"_OBJ_DES_VIBER_3": "予定や予約のリマインダーと確認を送信してノーショーを減らします",
|
|
2433
2433
|
"_OBJ_DES_VIBER_4": "注文確認、配送の最新情報、または予約のリマインダーを送信する",
|
|
2434
2434
|
"_OBJ_DES_VIBER_5": "アンケートやインタラクティブなテンプレートを通じて、ユーザーから貴重な洞察とフィードバックを直接収集します",
|
|
2435
2435
|
"_OBJ_DES_ZALO_1": "ターゲットを絞ったプロモーションやオファーをブロードキャストして、エンゲージメントと販売を促進します",
|
|
2436
2436
|
"_OBJ_DES_ZALO_2": "インタラクティブな要素を使用して販売目標到達プロセスをガイドし、リードと見込み顧客を育成します。",
|
|
2437
2437
|
"_OBJ_DES_ZALO_3": "タイムリーなコミュニケーションを確保するために、注文確認、配送の最新情報、または予約のリマインダーを送信します。",
|
|
2438
|
-
"_OBJ_DES_ZALO_4": "
|
|
2438
|
+
"_OBJ_DES_ZALO_4": "重要なお知らせ、アップデート、ニュースをユーザーと共有して最新情報を入手します。",
|
|
2439
2439
|
"_OBJ_DES_ZALO_5": "一貫性があり、有益で魅力的なコンテンツを通じてブランド アイデンティティと価値を強化する",
|
|
2440
2440
|
"_OBJ_DES_WHATSAPP_1": "ターゲットを絞ったプロモーションやオファーをブロードキャストして、エンゲージメントと販売を促進します",
|
|
2441
2441
|
"_OBJ_DES_WHATSAPP_2": "鮮やかなメッセージ テンプレートを使用してタイムリーで関連性のある更新を提供します",
|
|
2442
2442
|
"_OBJ_DES_WHATSAPP_3": "インタラクティブな要素を使用して販売目標到達プロセスをガイドし、リードと見込み顧客を育成します。",
|
|
2443
|
-
"_OBJ_DES_WHATSAPP_4": "
|
|
2444
|
-
"_OBJ_DES_WHATSAPP_5": "
|
|
2443
|
+
"_OBJ_DES_WHATSAPP_4": "予定や予約のリマインダーと確認を送信してノーショーを減らします",
|
|
2444
|
+
"_OBJ_DES_WHATSAPP_5": "重要なお知らせ、アップデート、ニュースをユーザーと共有して最新情報を入手します。",
|
|
2445
2445
|
"_OBJ_DES_TELEGRAM_1": "ターゲットを絞ったプロモーションやオファーをブロードキャストして、エンゲージメントと販売を促進します",
|
|
2446
2446
|
"_OBJ_DES_TELEGRAM_2": "鮮やかなメッセージ テンプレートを使用してタイムリーで関連性のある更新を提供します",
|
|
2447
2447
|
"_OBJ_DES_TELEGRAM_3": "インタラクティブなテンプレート要素を使用してセールスファネルを誘導し、リードと見込み顧客を育成します。",
|
|
2448
|
-
"_OBJ_DES_TELEGRAM_4": "
|
|
2449
|
-
"_OBJ_DES_TELEGRAM_5": "
|
|
2448
|
+
"_OBJ_DES_TELEGRAM_4": "予定や予約のリマインダーと確認を送信してノーショーを減らします",
|
|
2449
|
+
"_OBJ_DES_TELEGRAM_5": "重要なお知らせ、アップデート、ニュースをユーザーと共有して最新情報を入手します。",
|
|
2450
2450
|
"_OBJ_DES_LINE_1": "ターゲットを絞ったプロモーションやオファーをブロードキャストして、エンゲージメントと販売を促進します",
|
|
2451
2451
|
"_OBJ_DES_LINE_2": "Line のリッチ メニューを利用して、メッセージ内のインタラクティブなオプションとナビゲーションをユーザーに提供します",
|
|
2452
2452
|
"_OBJ_DES_LINE_3": "インタラクティブなテンプレート要素を使用してセールスファネルを誘導し、リードと見込み顧客を育成します。",
|
|
2453
|
-
"_OBJ_DES_LINE_4": "
|
|
2454
|
-
"_OBJ_DES_LINE_5": "
|
|
2453
|
+
"_OBJ_DES_LINE_4": "予定や予約のリマインダーと確認を送信してノーショーを減らします",
|
|
2454
|
+
"_OBJ_DES_LINE_5": "重要なお知らせ、アップデート、ニュースをユーザーと共有して最新情報を入手します。",
|
|
2455
2455
|
"_WEBPER_TEMP_OBJ_DES_POP_1": "潜在顧客からの情報、または既存顧客からのレビューやフィードバックを収集してデータを充実させます",
|
|
2456
2456
|
"_WEBPER_TEMP_OBJ_DES_POP_2": "限定セール、期間限定プロモーション、見逃せないおすすめ商品を紹介することで、収益を飛躍的に高めます。",
|
|
2457
2457
|
"_WEBPER_TEMP_OBJ_DES_POP_3": "追加購入を促すために補完的な製品やアップグレードを提案する",
|
|
@@ -2465,7 +2465,7 @@
|
|
|
2465
2465
|
"_WEBPER_TEMP_OBJ_DES_POP_11": "魅力的な運ゲーやインタラクティブなコンテンツで興奮を呼び起こし、エンゲージメントを高め、ユーザーを何度もリピートさせ続ける",
|
|
2466
2466
|
"_WEBPER_TEMP_OBJ_DES_POP_12": "新規ユーザーを支援し、提供された回答に基づいてパーソナライズされた推奨事項を提供します",
|
|
2467
2467
|
"_WEBPER_TEMP_OBJ_DES_POP_13": "直接リンクまたは QR コードを介してモバイル アプリをダウンロードしてスキャンするようユーザーに奨励します。",
|
|
2468
|
-
"_WEBPER_TEMP_OBJ_DES_FLOAT_1": "
|
|
2468
|
+
"_WEBPER_TEMP_OBJ_DES_FLOAT_1": "リード獲得フォームを含めて、訪問者にニュースレター、プロモーション、その他のマーケティング資料への登録を促します。",
|
|
2469
2469
|
"_WEBPER_TEMP_OBJ_DES_FLOAT_2": "カウントダウンタイマー付きの特別セールや限定プロモーションで視聴者の目を引き、さらに探索するよう促します。",
|
|
2470
2470
|
"_WEBPER_TEMP_OBJ_DES_FLOAT_3": "訪問者がスクロールしても表示され続けるバナーを使用して、重要なニュースを確実に目に留まり、更新情報を前面と中央に保ちます。",
|
|
2471
2471
|
"_WEBPER_TEMP_OBJ_DES_FLOAT_4": "あなたのブランドに対するフレンドリーな意見を確立するために、初めて Web サイトを閲覧する訪問者を歓迎します。",
|
|
@@ -2487,13 +2487,13 @@
|
|
|
2487
2487
|
"_WEBPER_TEMP_OBJ_DES_SLIDEIN_1": "購読フォーム、登録プロンプト、またはゲート付きコンテンツのオファーを通じて、電子メール アドレスや連絡先の詳細などのユーザー情報を取得します。",
|
|
2488
2488
|
"_WEBPER_TEMP_OBJ_DES_SLIDEIN_2": "直前の取引やコンテンツの推奨を提供して、ユーザーに滞在してさらに探索するよう促します。",
|
|
2489
2489
|
"_WEBPER_TEMP_OBJ_DES_SLIDEIN_3": "今後のコンテンツ、製品の発売、イベントを予告して、視聴者の期待と興奮を高め、Web サイトへのトラフィックを促進します。",
|
|
2490
|
-
"_WEBPER_TEMP_OBJ_DES_SLIDEIN_4": "
|
|
2490
|
+
"_WEBPER_TEMP_OBJ_DES_SLIDEIN_4": "アンケート、投票、フィードバック フォームを組み込んで貴重な洞察を収集し、交流を促進します。",
|
|
2491
2491
|
"_WEBPER_TEMP_OBJ_DES_SLIDEIN_5": "顧客のレビュー、評価、お客様の声などの社会的証明要素を紹介して、購入の意思決定に影響を与える信頼と信用を構築します。",
|
|
2492
2492
|
"_WEBPER_TEMP_OBJ_DES_SLIDEIN_6": "期間限定のオファー、カウントダウンタイマー、またはフラッシュセール通知を提示することで、緊迫感を醸成し、即時行動を促します。",
|
|
2493
2493
|
"_WEBPER_TEMP_OBJ_DES_SLIDEIN_7": "ターゲットを絞ったオファー、インセンティブ、またはリマインダーを使用して、躊躇している買い物客に購入を完了させるよう促します。",
|
|
2494
|
-
"_WEBPER_TEMP_OBJ_DES_SLIDEIN_8": "
|
|
2494
|
+
"_WEBPER_TEMP_OBJ_DES_SLIDEIN_8": "顧客からの問い合わせの必要性を減らし、ショッピング体験の全体的な満足度を向上させるために、顧客が遭遇する可能性のある一般的な懸念事項や問題のトラブルシューティングに対処する",
|
|
2495
2495
|
"_WEBPER_TEMP_OBJ_DES_SLIDEIN_9": "登録や出欠確認のオプションを提供して、ウェビナー、ワークショップ、イベントにユーザーを招待し、参加とエンゲージメントを促進します。",
|
|
2496
|
-
"_LINE_MESS_OBJ_DES_1": "
|
|
2496
|
+
"_LINE_MESS_OBJ_DES_1": "各ユーザーの好み、行動、過去のやり取りに基づいてメッセージをカスタマイズする",
|
|
2497
2497
|
"_LINE_MESS_OBJ_DES_2": "画像、ビデオ、ステッカーなどのマルチメディア コンテンツでメッセージを充実させます",
|
|
2498
2498
|
"_LINE_MESS_OBJ_DES_3": "ユーザーの参加を促すために、クリック可能なボタンなどのインタラクティブな要素を組み込む",
|
|
2499
2499
|
"_LINE_MESS_OBJ_DES_4": "インタラクティブなメッセージ テンプレート内で応答、質問、フィードバックを奨励することで、フォロワーとの双方向の対話を促進します",
|
|
@@ -2540,14 +2540,14 @@
|
|
|
2540
2540
|
"_REALTIME_FACEBOOK_MESSENGER_OBJ_1": "カスタマーサポートの強化",
|
|
2541
2541
|
"_REALTIME_FACEBOOK_MESSENGER_DES_1": "インタラクション データを活用してタイムリーかつパーソナライズされたサポートを提供し、顧客満足度とロイヤルティを向上させます。",
|
|
2542
2542
|
"_REALTIME_FACEBOOK_MESSENGER_OBJ_2": "マーケティング戦略を洗練する",
|
|
2543
|
-
"_REALTIME_FACEBOOK_MESSENGER_DES_2": "インタラクション
|
|
2543
|
+
"_REALTIME_FACEBOOK_MESSENGER_DES_2": "インタラクション パターンを分析して顧客の興味や行動をより深く理解し、マーケティング活動を調整できるようにします。",
|
|
2544
2544
|
"_REALTIME_FACEBOOK_MESSENGER_OBJ_3": "対応管理を自動化する",
|
|
2545
2545
|
"_REALTIME_FACEBOOK_MESSENGER_DES_3": "マーケティング ハブ機能と統合すると、応答とフォローアップが自動化され、顧客の質問に答えられないことがなくなります。",
|
|
2546
2546
|
"_REALTIME_FACEBOOK_MESSENGER_OBJ_4": "エンゲージメントを高める",
|
|
2547
2547
|
"_REALTIME_FACEBOOK_MESSENGER_DES_4": "インタラクションから得た洞察を利用して、視聴者の共感を呼ぶ、より魅力的なコンテンツやキャンペーンを作成します。",
|
|
2548
2548
|
"_REALTIME_FACEBOOK_MESSENGER_OBJ_5": "キャンペーンの効果を測定する",
|
|
2549
2549
|
"_REALTIME_FACEBOOK_MESSENGER_DES_5": "インタラクション データを分析して、顧客がさまざまなメッセージにどのように反応するかを確認することで、マーケティング キャンペーンの影響を追跡します。",
|
|
2550
|
-
"_REALTIME_TIKTOK_LEAD": "「Tiktok Lead」テンプレートを使用すると、TikTok
|
|
2550
|
+
"_REALTIME_TIKTOK_LEAD": "「Tiktok Lead」テンプレートを使用すると、TikTok 広告を通じてフォームに記入するユーザーからのデータの収集と管理がシームレスかつ効率的になりました。このリアルタイム機能により、視聴者に関する洞察が即座に得られるため、マーケティング活動を微調整し、より高いエンゲージメントとコンバージョンを促進することができます。",
|
|
2551
2551
|
"_REALTIME_TIKTOK_LEAD_OBJ_1": "リードを顧客に変える",
|
|
2552
2552
|
"_REALTIME_TIKTOK_LEAD_DES_1": "収集した情報を利用して潜在的な見込み客と直接連絡を取ったり相談したりして、彼らを有料顧客に変えます。",
|
|
2553
2553
|
"_REALTIME_TIKTOK_LEAD_OBJ_2": "マーケティング活動をパーソナライズする",
|
|
@@ -2091,7 +2091,7 @@
|
|
|
2091
2091
|
"_PREDICT_MODEL_UPDATE_INTO_EXISTING_ATTRIBUTE": "Cập nhật vào các thuộc tính hiện có",
|
|
2092
2092
|
"_PREDICT_MODEL_SELECT_SEGMENT": "Chọn đoạn",
|
|
2093
2093
|
"_PREDICT_MODEL_SELECT_ATTRIBUTE": "Chọn thuộc tính",
|
|
2094
|
-
"_PREDICT_MODEL_CANNOT_LOSE_THEM": "Không thể mất chúng",
|
|
2094
|
+
"_PREDICT_MODEL_CANNOT_LOSE_THEM": "Không thể đánh mất chúng",
|
|
2095
2095
|
"_PREDICT_MODEL_AT_RISK": "Có nguy cơ",
|
|
2096
2096
|
"_PREDICT_MODEL_LOST_CUSTOMER": "Khách hàng bị mất",
|
|
2097
2097
|
"_PREDICT_MODEL_LOYAL": "Trung thành",
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
export interface Attribute {
|
|
2
|
+
itemTypeId: number;
|
|
3
|
+
itemPropertyName: string;
|
|
4
|
+
itemPropertyDisplay: string;
|
|
5
|
+
dataType: string;
|
|
6
|
+
type: number;
|
|
7
|
+
autoSuggestion: number;
|
|
8
|
+
displayFormat?: {
|
|
9
|
+
type: string;
|
|
10
|
+
config: Record<string, any>;
|
|
11
|
+
};
|
|
12
|
+
isSort: number;
|
|
13
|
+
isFilter: number;
|
|
14
|
+
propertyDisplayMultilang: Record<string, string>;
|
|
15
|
+
descriptionMultilang: string;
|
|
16
|
+
description_multilang: string;
|
|
17
|
+
groupId: number;
|
|
18
|
+
computeType: number | null;
|
|
19
|
+
computePropertyName: string | null;
|
|
20
|
+
computeItemTypeId: number | null;
|
|
21
|
+
isEncrypt: number;
|
|
22
|
+
isRequired: number;
|
|
23
|
+
isIdentity: number;
|
|
24
|
+
status: string | number;
|
|
25
|
+
translateLabel: string;
|
|
26
|
+
isPk: number;
|
|
27
|
+
isOutputProductId: number;
|
|
28
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
// Libraries
|
|
2
2
|
import React, { useState } from 'react';
|
|
3
3
|
import { createContext } from 'use-context-selector';
|
|
4
|
+
// Types
|
|
5
|
+
import { useGetLoggedUser } from '../../..';
|
|
4
6
|
// Components
|
|
5
7
|
import { Spin } from '@antscorp/antsomi-ui/es/components';
|
|
6
8
|
// Hooks
|
|
@@ -17,6 +19,11 @@ const AppConfigProvider = props => {
|
|
|
17
19
|
}, [value, appConfig]);
|
|
18
20
|
const mergedValue = useDeepCompareMemo(() => (Object.assign(Object.assign({}, appConfig), { setAppConfig })), [appConfig]);
|
|
19
21
|
const { isLoading } = useGetUserInfo(mergedValue);
|
|
22
|
+
useGetLoggedUser({
|
|
23
|
+
args: {
|
|
24
|
+
auth: mergedValue.auth,
|
|
25
|
+
},
|
|
26
|
+
});
|
|
20
27
|
return (React.createElement(AppConfigContext.Provider, { value: mergedValue }, isLoading ? React.createElement(Spin, { indicatorSize: 24, fullscreen: true }) : children));
|
|
21
28
|
};
|
|
22
29
|
export { AppConfigContext, AppConfigProvider };
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { UseQueryOptions } from '@tanstack/react-query';
|
|
2
|
+
import { TGetLoggedUserArgs } from '../../services/User';
|
|
3
|
+
import { LoggedUser } from '../../models/LoggedUser';
|
|
4
|
+
export type TUseGetLoggedUser = {
|
|
5
|
+
args: TGetLoggedUserArgs;
|
|
6
|
+
options?: UseQueryOptions<LoggedUser, any, LoggedUser, any[]>;
|
|
7
|
+
};
|
|
8
|
+
export declare const useGetLoggedUser: (params: TUseGetLoggedUser) => import("@tanstack/react-query").UseQueryResult<LoggedUser, any>;
|
package/es/queries/User/index.js
CHANGED
|
@@ -1 +1,13 @@
|
|
|
1
|
-
|
|
1
|
+
import { useQuery } from '@tanstack/react-query';
|
|
2
|
+
// Services
|
|
3
|
+
import { userServices } from '../../services/User';
|
|
4
|
+
import { PORTAL_KEYS, QUERY_KEYS } from '../../constants';
|
|
5
|
+
import { UserAndPortalDefaultConfig } from '../../utils/portal';
|
|
6
|
+
export const useGetLoggedUser = (params) => {
|
|
7
|
+
const { args, options } = params;
|
|
8
|
+
return useQuery(Object.assign({ queryKey: [QUERY_KEYS.GET_LOGGED_USER, args], queryFn: () => userServices.getLoggedUser(args), onSuccess(data) {
|
|
9
|
+
UserAndPortalDefaultConfig.setPartial({
|
|
10
|
+
[PORTAL_KEYS.USER_LANGUAGE]: data.language,
|
|
11
|
+
});
|
|
12
|
+
} }, options));
|
|
13
|
+
};
|
package/es/queries/index.d.ts
CHANGED
package/es/queries/index.js
CHANGED
|
@@ -1 +1,9 @@
|
|
|
1
|
+
import { TServiceAuth } from '../../types';
|
|
2
|
+
import { LoggedUser } from '../../models/LoggedUser';
|
|
1
3
|
export { getUserInfo } from './getUserInfo';
|
|
4
|
+
export type TGetLoggedUserArgs = {
|
|
5
|
+
auth?: TServiceAuth;
|
|
6
|
+
};
|
|
7
|
+
export declare const userServices: {
|
|
8
|
+
getLoggedUser: (args: TGetLoggedUserArgs) => Promise<LoggedUser>;
|
|
9
|
+
};
|
|
@@ -1 +1,36 @@
|
|
|
1
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
2
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
3
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
4
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
5
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
6
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
7
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
|
+
});
|
|
9
|
+
};
|
|
10
|
+
// Libraries
|
|
11
|
+
import { get } from 'lodash';
|
|
12
|
+
import axios from 'axios';
|
|
13
|
+
// Constants
|
|
14
|
+
import { IAM_API } from '../../constants';
|
|
1
15
|
export { getUserInfo } from './getUserInfo';
|
|
16
|
+
export const userServices = {
|
|
17
|
+
getLoggedUser: (args) => __awaiter(void 0, void 0, void 0, function* () {
|
|
18
|
+
try {
|
|
19
|
+
const { auth } = args || {};
|
|
20
|
+
const { userId, portalId } = auth || {};
|
|
21
|
+
const response = yield axios({
|
|
22
|
+
method: 'GET',
|
|
23
|
+
url: `${IAM_API}/api/3rd/info`,
|
|
24
|
+
params: {
|
|
25
|
+
type: 'user-info',
|
|
26
|
+
userId,
|
|
27
|
+
networkId: portalId,
|
|
28
|
+
},
|
|
29
|
+
});
|
|
30
|
+
return get(response, 'data.data', {});
|
|
31
|
+
}
|
|
32
|
+
catch (error) {
|
|
33
|
+
return Promise.reject(error);
|
|
34
|
+
}
|
|
35
|
+
}),
|
|
36
|
+
};
|
package/es/types/date.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
package/es/types/index.d.ts
CHANGED
package/es/types/index.js
CHANGED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { Attribute } from '../models/Attribute';
|
|
2
|
+
type FormatAttributeDisplayArgs = {
|
|
3
|
+
attribute: Attribute;
|
|
4
|
+
value: any;
|
|
5
|
+
};
|
|
6
|
+
/**
|
|
7
|
+
* Format attribute value according to its data type and display format.
|
|
8
|
+
* @param {{ attribute: Attribute, value: any }} args - attribute and its value.
|
|
9
|
+
* @returns {string} Formatted value or '--' if value is empty.
|
|
10
|
+
*/
|
|
11
|
+
export declare const formatAttributeDisplay: ({ attribute, value, }: FormatAttributeDisplayArgs) => string;
|
|
12
|
+
/**
|
|
13
|
+
* Get display label of an attribute, based on user language.
|
|
14
|
+
* It will return the label of attribute in the language that the user is currently using.
|
|
15
|
+
* If the attribute does not have a label in that language, it will return the default label.
|
|
16
|
+
* If the attribute does not have a default label, it will return an empty string.
|
|
17
|
+
* @param {Attribute} attribute - attribute to get display label
|
|
18
|
+
* @returns {string} display label of the attribute
|
|
19
|
+
*/
|
|
20
|
+
export declare const getAttributeDisplayLabel: (attribute: Attribute, defaultLabel?: string) => string;
|
|
21
|
+
export {};
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
// Utils
|
|
2
|
+
import { formatAttributeUTCDate } from './date';
|
|
3
|
+
import { getUserLocaleLanguage, safeParseDisplayFormat } from './portal';
|
|
4
|
+
/**
|
|
5
|
+
* Format attribute value according to its data type and display format.
|
|
6
|
+
* @param {{ attribute: Attribute, value: any }} args - attribute and its value.
|
|
7
|
+
* @returns {string} Formatted value or '--' if value is empty.
|
|
8
|
+
*/
|
|
9
|
+
export const formatAttributeDisplay = ({ attribute, value, }) => {
|
|
10
|
+
const { dataType } = attribute || {};
|
|
11
|
+
const displayFormat = safeParseDisplayFormat(attribute === null || attribute === void 0 ? void 0 : attribute.displayFormat, {
|
|
12
|
+
dataType,
|
|
13
|
+
});
|
|
14
|
+
let dataValue = value;
|
|
15
|
+
switch (true) {
|
|
16
|
+
case dataType === 'datetime':
|
|
17
|
+
dataValue = formatAttributeUTCDate(value, displayFormat);
|
|
18
|
+
break;
|
|
19
|
+
default:
|
|
20
|
+
break;
|
|
21
|
+
}
|
|
22
|
+
return dataValue || '--';
|
|
23
|
+
};
|
|
24
|
+
/**
|
|
25
|
+
* Get display label of an attribute, based on user language.
|
|
26
|
+
* It will return the label of attribute in the language that the user is currently using.
|
|
27
|
+
* If the attribute does not have a label in that language, it will return the default label.
|
|
28
|
+
* If the attribute does not have a default label, it will return an empty string.
|
|
29
|
+
* @param {Attribute} attribute - attribute to get display label
|
|
30
|
+
* @returns {string} display label of the attribute
|
|
31
|
+
*/
|
|
32
|
+
export const getAttributeDisplayLabel = (attribute, defaultLabel) => {
|
|
33
|
+
var _a;
|
|
34
|
+
const { propertyDisplayMultilang, itemPropertyDisplay } = attribute || {};
|
|
35
|
+
const { DEFAULT_LANG } = propertyDisplayMultilang || {};
|
|
36
|
+
const userLanguage = ((_a = getUserLocaleLanguage()) === null || _a === void 0 ? void 0 : _a.toUpperCase()) || DEFAULT_LANG;
|
|
37
|
+
return (propertyDisplayMultilang === null || propertyDisplayMultilang === void 0 ? void 0 : propertyDisplayMultilang[userLanguage]) || itemPropertyDisplay || defaultLabel || '';
|
|
38
|
+
};
|
package/es/utils/date.d.ts
CHANGED
|
@@ -1,5 +1,12 @@
|
|
|
1
|
+
import { TPortalFormatDate, TPortalFormatTime } from '../types';
|
|
2
|
+
import { Attribute } from '../models/Attribute';
|
|
1
3
|
export declare const startOfMonth: (date: Date) => Date;
|
|
2
4
|
export declare const differenceInMonths: (dateA: Date, dateB: Date) => number;
|
|
3
5
|
export declare const subMonths: (date: Date, number: number) => Date;
|
|
4
6
|
export declare const formatDateTZ: (date: Date | string, format: string, timezone?: string) => string;
|
|
5
7
|
export declare const formatDate: (date: Date | string, format: string) => string;
|
|
8
|
+
/** Portal Settings */
|
|
9
|
+
export declare function getDateFormat(date: TPortalFormatDate, format: string): any;
|
|
10
|
+
export declare function getTimeFormat(time: TPortalFormatTime): string;
|
|
11
|
+
export declare function getDateTimeFormatTranslate(displayFormat?: any): any;
|
|
12
|
+
export declare function formatAttributeUTCDate(timestamp: string, displayFormat: Attribute['displayFormat']): string;
|
package/es/utils/date.js
CHANGED
|
@@ -1,6 +1,11 @@
|
|
|
1
|
+
// Libraries
|
|
1
2
|
import dayjs from 'dayjs';
|
|
2
3
|
import timezone from 'dayjs/plugin/timezone';
|
|
3
|
-
|
|
4
|
+
// Utils
|
|
5
|
+
import { getPortalFormatDateTime, getPortalTimeZone, getUserLocaleLanguage } from './portal';
|
|
6
|
+
// Constants
|
|
7
|
+
import { PORTAL_MAP_DATE, PORTAL_MAP_TIME } from '../constants';
|
|
8
|
+
import { safeParse } from './common';
|
|
4
9
|
dayjs.extend(timezone);
|
|
5
10
|
export const startOfMonth = (date) => dayjs(date).startOf('month').toDate();
|
|
6
11
|
export const differenceInMonths = (dateA, dateB) => dayjs(dateA).diff(dateB, 'month');
|
|
@@ -10,3 +15,57 @@ export const formatDateTZ = (date, format, timezone) => {
|
|
|
10
15
|
return dayjs.tz(date, timezone || defaultTimezone).format(format);
|
|
11
16
|
};
|
|
12
17
|
export const formatDate = (date, format) => dayjs(date).format(format);
|
|
18
|
+
/** Portal Settings */
|
|
19
|
+
export function getDateFormat(date, format) {
|
|
20
|
+
var _a, _b, _c;
|
|
21
|
+
const { check, value } = date || {};
|
|
22
|
+
if (check) {
|
|
23
|
+
if (value && format) {
|
|
24
|
+
return (_c = (_b = PORTAL_MAP_DATE[(_a = getUserLocaleLanguage()) === null || _a === void 0 ? void 0 : _a.toLowerCase()]) === null || _b === void 0 ? void 0 : _b[format]) === null || _c === void 0 ? void 0 : _c[date.value];
|
|
25
|
+
}
|
|
26
|
+
return PORTAL_MAP_DATE.en['MM/DD/YYYY'].medium;
|
|
27
|
+
}
|
|
28
|
+
return '';
|
|
29
|
+
}
|
|
30
|
+
export function getTimeFormat(time) {
|
|
31
|
+
var _a;
|
|
32
|
+
const { check, value, timeFormat } = time || {};
|
|
33
|
+
if (check) {
|
|
34
|
+
if (timeFormat && value) {
|
|
35
|
+
return (_a = PORTAL_MAP_TIME[timeFormat]) === null || _a === void 0 ? void 0 : _a[value];
|
|
36
|
+
}
|
|
37
|
+
return PORTAL_MAP_TIME[12].medium;
|
|
38
|
+
}
|
|
39
|
+
return '';
|
|
40
|
+
}
|
|
41
|
+
export function getDateTimeFormatTranslate(displayFormat = {}) {
|
|
42
|
+
if (Object.keys(displayFormat).length === 0) {
|
|
43
|
+
// eslint-disable-next-line no-param-reassign
|
|
44
|
+
displayFormat = getPortalFormatDateTime();
|
|
45
|
+
}
|
|
46
|
+
const dateFormat = getDateFormat(displayFormat.date, displayFormat.format);
|
|
47
|
+
const timeFormat = getTimeFormat(safeParse(displayFormat.time, {}));
|
|
48
|
+
if (dateFormat !== '' && timeFormat !== '') {
|
|
49
|
+
return `${dateFormat} ${timeFormat}`;
|
|
50
|
+
}
|
|
51
|
+
if (dateFormat !== '') {
|
|
52
|
+
return dateFormat;
|
|
53
|
+
}
|
|
54
|
+
if (timeFormat !== '') {
|
|
55
|
+
return timeFormat;
|
|
56
|
+
}
|
|
57
|
+
return "MMM dd',' yyyy p";
|
|
58
|
+
}
|
|
59
|
+
export function formatAttributeUTCDate(timestamp, displayFormat) {
|
|
60
|
+
try {
|
|
61
|
+
const isValid = dayjs(timestamp).isValid();
|
|
62
|
+
if (!isValid) {
|
|
63
|
+
return timestamp;
|
|
64
|
+
}
|
|
65
|
+
const format = getDateTimeFormatTranslate((displayFormat === null || displayFormat === void 0 ? void 0 : displayFormat.config) || {});
|
|
66
|
+
return formatDateTZ(timestamp, format);
|
|
67
|
+
}
|
|
68
|
+
catch (error) {
|
|
69
|
+
return timestamp;
|
|
70
|
+
}
|
|
71
|
+
}
|
package/es/utils/index.d.ts
CHANGED
|
@@ -4,6 +4,8 @@ export * from './handleError';
|
|
|
4
4
|
export * from './templateListing';
|
|
5
5
|
export * from './styles';
|
|
6
6
|
export * from './variables';
|
|
7
|
+
export * from './date';
|
|
7
8
|
export * from './actionButtons';
|
|
8
9
|
export * from './dataTable';
|
|
9
10
|
export * from './cookie';
|
|
11
|
+
export * from './attribute';
|
package/es/utils/index.js
CHANGED
|
@@ -4,6 +4,8 @@ export * from './handleError';
|
|
|
4
4
|
export * from './templateListing';
|
|
5
5
|
export * from './styles';
|
|
6
6
|
export * from './variables';
|
|
7
|
+
export * from './date';
|
|
7
8
|
export * from './actionButtons';
|
|
8
9
|
export * from './dataTable';
|
|
9
10
|
export * from './cookie';
|
|
11
|
+
export * from './attribute';
|
package/es/utils/portal.d.ts
CHANGED
|
@@ -64,11 +64,22 @@ export declare function getUserInfoPortal(data: Record<string, any>): {
|
|
|
64
64
|
};
|
|
65
65
|
export declare const UserAndPortalDefaultConfig: {
|
|
66
66
|
set: (portal?: Record<string, any>, user?: Record<string, any>) => Record<string, any>;
|
|
67
|
+
setPartial: (data: Record<string, any>) => void;
|
|
67
68
|
getByKey: (key: string) => any;
|
|
68
69
|
};
|
|
69
70
|
export declare function getPortalFormatDateTimeLong(): any;
|
|
70
71
|
export declare function getPortalTimeZone(): any;
|
|
71
72
|
export declare function getUserLocaleLanguage(): any;
|
|
73
|
+
export declare function getPortalFormatDateTime(): any;
|
|
72
74
|
export declare function getPortalFormatCurrency(): any;
|
|
73
75
|
export declare function getPortalCurrency(): any;
|
|
76
|
+
export declare function getPortalFormatNumber(): any;
|
|
74
77
|
export declare function safeParseDisplayFormatCurrency(value: number, displayFormat?: Record<string, any>): string;
|
|
78
|
+
export declare function getPortalFormatPercentage(): any;
|
|
79
|
+
export declare function safeParseDisplayFormat(displayFormat?: {
|
|
80
|
+
config: Record<string, any>;
|
|
81
|
+
type: string;
|
|
82
|
+
} | null, params?: any): {
|
|
83
|
+
type: string;
|
|
84
|
+
config: any;
|
|
85
|
+
};
|
package/es/utils/portal.js
CHANGED
|
@@ -111,6 +111,11 @@ export const UserAndPortalDefaultConfig = (() => {
|
|
|
111
111
|
setValue(PORTAL_KEYS.DATE_TIME_FORMAT_LONG, convertDateTimeToFormatLong(portalConfig.dateAndTimeFormat));
|
|
112
112
|
return APP_CACHE_PARAMS;
|
|
113
113
|
},
|
|
114
|
+
setPartial: (data) => {
|
|
115
|
+
Object.keys(data || {}).forEach(key => {
|
|
116
|
+
APP_CACHE_PARAMS[key] = data[key];
|
|
117
|
+
});
|
|
118
|
+
},
|
|
114
119
|
getByKey: (key) => APP_CACHE_PARAMS[key],
|
|
115
120
|
};
|
|
116
121
|
})();
|
|
@@ -124,12 +129,18 @@ export function getPortalTimeZone() {
|
|
|
124
129
|
export function getUserLocaleLanguage() {
|
|
125
130
|
return UserAndPortalDefaultConfig.getByKey(PORTAL_KEYS.USER_LANGUAGE) || 'EN';
|
|
126
131
|
}
|
|
132
|
+
export function getPortalFormatDateTime() {
|
|
133
|
+
return UserAndPortalDefaultConfig.getByKey(PORTAL_KEYS.DATE_TIME_FORMAT);
|
|
134
|
+
}
|
|
127
135
|
export function getPortalFormatCurrency() {
|
|
128
136
|
return UserAndPortalDefaultConfig.getByKey(PORTAL_KEYS.CURRENCY_FORMAT);
|
|
129
137
|
}
|
|
130
138
|
export function getPortalCurrency() {
|
|
131
139
|
return safeParse(UserAndPortalDefaultConfig.getByKey(PORTAL_KEYS.CURRENCY), 'USD');
|
|
132
140
|
}
|
|
141
|
+
export function getPortalFormatNumber() {
|
|
142
|
+
return UserAndPortalDefaultConfig.getByKey(PORTAL_KEYS.NUMBER_FORMAT);
|
|
143
|
+
}
|
|
133
144
|
export function safeParseDisplayFormatCurrency(value, displayFormat = {}) {
|
|
134
145
|
if (Object.keys(displayFormat).length === 0) {
|
|
135
146
|
displayFormat = getPortalFormatCurrency();
|
|
@@ -137,3 +148,76 @@ export function safeParseDisplayFormatCurrency(value, displayFormat = {}) {
|
|
|
137
148
|
const temp = convertNumberByDisplayFormat(value, displayFormat.group, displayFormat.decimal, displayFormat.decimalPlace);
|
|
138
149
|
return `${temp} ${displayFormat.currency}`;
|
|
139
150
|
}
|
|
151
|
+
export function getPortalFormatPercentage() {
|
|
152
|
+
return UserAndPortalDefaultConfig.getByKey(PORTAL_KEYS.PERCENTAGE_FORMAT);
|
|
153
|
+
}
|
|
154
|
+
export function safeParseDisplayFormat(displayFormat = null, params = {}) {
|
|
155
|
+
if (displayFormat !== null) {
|
|
156
|
+
const { type } = displayFormat || {};
|
|
157
|
+
const config = safeParse(displayFormat.config, {});
|
|
158
|
+
// if (config !== undefined && Object.keys(config).length > 0) {
|
|
159
|
+
// return displayFormat;
|
|
160
|
+
// }
|
|
161
|
+
if (type === 'NUMBER') {
|
|
162
|
+
return {
|
|
163
|
+
type: 'NUMBER',
|
|
164
|
+
config: Object.assign(Object.assign({}, getPortalFormatNumber()), config),
|
|
165
|
+
};
|
|
166
|
+
}
|
|
167
|
+
if (type === 'CURRENCY') {
|
|
168
|
+
return {
|
|
169
|
+
type: 'CURRENCY',
|
|
170
|
+
config: Object.assign(Object.assign({}, getPortalFormatCurrency()), config),
|
|
171
|
+
};
|
|
172
|
+
}
|
|
173
|
+
if (type === 'PERCENTAGE') {
|
|
174
|
+
return {
|
|
175
|
+
type: 'PERCENTAGE',
|
|
176
|
+
config: Object.assign(Object.assign({}, getPortalFormatPercentage()), config),
|
|
177
|
+
};
|
|
178
|
+
}
|
|
179
|
+
if (type === 'DATE_AND_TIME') {
|
|
180
|
+
return {
|
|
181
|
+
type: 'DATE_AND_TIME',
|
|
182
|
+
config: Object.assign(Object.assign({}, getPortalFormatDateTime()), config),
|
|
183
|
+
};
|
|
184
|
+
}
|
|
185
|
+
if (type === 'RAW_STRING' || type === 'IMAGE' || type === 'LINK' || type === 'CUSTOM_LINK') {
|
|
186
|
+
return {
|
|
187
|
+
type,
|
|
188
|
+
config: Object.assign({}, config),
|
|
189
|
+
};
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
const { dataType } = params || {};
|
|
193
|
+
if (dataType === 'number') {
|
|
194
|
+
const { isCurrency } = params || {};
|
|
195
|
+
if (parseInt(isCurrency) === 1) {
|
|
196
|
+
return {
|
|
197
|
+
type: 'CURRENCY',
|
|
198
|
+
config: getPortalFormatCurrency(),
|
|
199
|
+
};
|
|
200
|
+
}
|
|
201
|
+
return {
|
|
202
|
+
type: 'NUMBER',
|
|
203
|
+
config: getPortalFormatNumber(),
|
|
204
|
+
};
|
|
205
|
+
}
|
|
206
|
+
if (dataType === 'datetime') {
|
|
207
|
+
return {
|
|
208
|
+
type: 'DATE_AND_TIME',
|
|
209
|
+
config: getPortalFormatDateTime(),
|
|
210
|
+
};
|
|
211
|
+
}
|
|
212
|
+
if (dataType === 'string') {
|
|
213
|
+
return {
|
|
214
|
+
type: 'RAW_STRING',
|
|
215
|
+
config: {},
|
|
216
|
+
};
|
|
217
|
+
}
|
|
218
|
+
// string is default
|
|
219
|
+
return {
|
|
220
|
+
type: 'RAW_STRING',
|
|
221
|
+
config: {},
|
|
222
|
+
};
|
|
223
|
+
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@antscorp/antsomi-ui",
|
|
3
|
-
"version": "1.3.5-beta.
|
|
3
|
+
"version": "1.3.5-beta.743",
|
|
4
4
|
"description": "An enterprise-class UI design language and React UI library.",
|
|
5
5
|
"sideEffects": [
|
|
6
6
|
"dist/*",
|
|
@@ -20,7 +20,7 @@
|
|
|
20
20
|
"types": "es/index.d.ts",
|
|
21
21
|
"scripts": {
|
|
22
22
|
"prepublishOnly": "yarn && yarn build:es",
|
|
23
|
-
"build:es": "npm run
|
|
23
|
+
"build:es": "npm run clean && npm run copy-files && npm run ts-compile",
|
|
24
24
|
"clean": "rimraf dist lib es",
|
|
25
25
|
"dev": "vite",
|
|
26
26
|
"build:dist": "webpack --config webpack.build.js",
|