react-hook-core 0.2.9 → 0.3.1
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/lib/core.js +2 -15
- package/lib/reflect.js +14 -0
- package/lib/search.js +119 -23
- package/lib/useSearch.js +3 -4
- package/package.json +1 -1
- package/src/core.ts +3 -14
- package/src/input.ts +4 -4
- package/src/reflect.ts +24 -0
- package/src/search.ts +125 -43
- package/src/useSearch.ts +5 -6
package/lib/core.js
CHANGED
|
@@ -133,8 +133,8 @@ function initForm(form, initMat) {
|
|
|
133
133
|
}
|
|
134
134
|
exports.initForm = initForm;
|
|
135
135
|
function error(err, gv, ae) {
|
|
136
|
-
var title =
|
|
137
|
-
var msg =
|
|
136
|
+
var title = getString('error', gv);
|
|
137
|
+
var msg = getString('error_internal', gv);
|
|
138
138
|
if (!err) {
|
|
139
139
|
ae(msg, undefined, title);
|
|
140
140
|
return;
|
|
@@ -235,16 +235,3 @@ function getValidateForm(u, vf) {
|
|
|
235
235
|
return (u && u.ui ? u.ui.validateForm : undefined);
|
|
236
236
|
}
|
|
237
237
|
exports.getValidateForm = getValidateForm;
|
|
238
|
-
function handleToggle(target, on) {
|
|
239
|
-
if (target) {
|
|
240
|
-
if (on) {
|
|
241
|
-
if (!target.classList.contains('on')) {
|
|
242
|
-
target.classList.add('on');
|
|
243
|
-
}
|
|
244
|
-
}
|
|
245
|
-
else {
|
|
246
|
-
target.classList.remove('on');
|
|
247
|
-
}
|
|
248
|
-
}
|
|
249
|
-
}
|
|
250
|
-
exports.handleToggle = handleToggle;
|
package/lib/reflect.js
CHANGED
|
@@ -152,6 +152,20 @@ function makeDiff(o1, o2, keys, version) {
|
|
|
152
152
|
return obj3;
|
|
153
153
|
}
|
|
154
154
|
exports.makeDiff = makeDiff;
|
|
155
|
+
function hasDiff(o1, o2, keys, version) {
|
|
156
|
+
var diff = makeDiff(o1, o2, keys, version);
|
|
157
|
+
return !isEmptyObject(diff);
|
|
158
|
+
}
|
|
159
|
+
exports.hasDiff = hasDiff;
|
|
160
|
+
function goBack(navigate, confirm, resource, o1, o2, keys, version) {
|
|
161
|
+
if (!hasDiff(o1, o2, keys, version)) {
|
|
162
|
+
navigate(-1);
|
|
163
|
+
}
|
|
164
|
+
else {
|
|
165
|
+
confirm(resource.msg_confirm_back, function () { return navigate(-1); });
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
exports.goBack = goBack;
|
|
155
169
|
function notIn(s1, s2) {
|
|
156
170
|
var r = [];
|
|
157
171
|
for (var _i = 0, s2_1 = s2; _i < s2_1.length; _i++) {
|
package/lib/search.js
CHANGED
|
@@ -7,38 +7,58 @@ var __spreadArrays = (this && this.__spreadArrays) || function () {
|
|
|
7
7
|
return r;
|
|
8
8
|
};
|
|
9
9
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
+
var reflect_1 = require("./reflect");
|
|
10
11
|
var resources = (function () {
|
|
11
12
|
function resources() {
|
|
12
13
|
}
|
|
13
14
|
resources.limit = 24;
|
|
15
|
+
resources.pages = [12, 24, 60, 100, 120, 180, 300, 600];
|
|
16
|
+
resources.pageMaxSize = 7;
|
|
14
17
|
return resources;
|
|
15
18
|
}());
|
|
16
19
|
exports.resources = resources;
|
|
20
|
+
function getOffset(limit, page, firstLimit) {
|
|
21
|
+
var p = page && page > 0 ? page : 1;
|
|
22
|
+
if (firstLimit && firstLimit > 0) {
|
|
23
|
+
var offset = limit * (p - 2) + firstLimit;
|
|
24
|
+
return offset < 0 ? 0 : offset;
|
|
25
|
+
}
|
|
26
|
+
else {
|
|
27
|
+
var offset = limit * (p - 1);
|
|
28
|
+
return offset < 0 ? 0 : offset;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
exports.getOffset = getOffset;
|
|
17
32
|
function mergeFilter(obj, b, pageSizes, arrs) {
|
|
18
33
|
var a = b;
|
|
19
34
|
if (!b) {
|
|
20
35
|
a = {};
|
|
21
36
|
}
|
|
22
|
-
var
|
|
37
|
+
var keys = Object.keys(obj);
|
|
38
|
+
for (var _i = 0, keys_1 = keys; _i < keys_1.length; _i++) {
|
|
39
|
+
var key = keys_1[_i];
|
|
40
|
+
var p = a[key];
|
|
41
|
+
var v = obj[key];
|
|
42
|
+
if (v && v !== "") {
|
|
43
|
+
a[key] = isArray(key, p, arrs) ? v.split(",") : v;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
var spage = obj["page"];
|
|
47
|
+
if (!isNaN(spage)) {
|
|
48
|
+
var page = parseInt(spage, 10);
|
|
49
|
+
a.page = page > 1 ? page : undefined;
|
|
50
|
+
}
|
|
51
|
+
var slimit = obj["limit"];
|
|
23
52
|
if (!isNaN(slimit)) {
|
|
24
53
|
var limit = parseInt(slimit, 10);
|
|
25
54
|
if (pageSizes && pageSizes.length > 0) {
|
|
26
55
|
if (pageSizes.indexOf(limit) >= 0) {
|
|
27
56
|
a.limit = limit;
|
|
57
|
+
return a;
|
|
28
58
|
}
|
|
29
59
|
}
|
|
30
60
|
else {
|
|
31
|
-
a.limit = limit;
|
|
32
|
-
}
|
|
33
|
-
}
|
|
34
|
-
delete obj['limit'];
|
|
35
|
-
var keys = Object.keys(obj);
|
|
36
|
-
for (var _i = 0, keys_1 = keys; _i < keys_1.length; _i++) {
|
|
37
|
-
var key = keys_1[_i];
|
|
38
|
-
var p = a[key];
|
|
39
|
-
var v = obj[key];
|
|
40
|
-
if (v && v !== '') {
|
|
41
|
-
a[key] = (isArray(key, p, arrs) ? v.split(',') : v);
|
|
61
|
+
a.limit = limit > 0 ? limit : 12;
|
|
42
62
|
}
|
|
43
63
|
}
|
|
44
64
|
return a;
|
|
@@ -232,7 +252,10 @@ function showPaging(com, list, pageSize, total) {
|
|
|
232
252
|
com.showPaging = (!total || com.pages <= 1 || (list && list.length >= total) ? false : true);
|
|
233
253
|
}
|
|
234
254
|
exports.showPaging = showPaging;
|
|
235
|
-
function getFields(form) {
|
|
255
|
+
function getFields(form, arr) {
|
|
256
|
+
if (arr && arr.length > 0) {
|
|
257
|
+
return arr;
|
|
258
|
+
}
|
|
236
259
|
if (!form) {
|
|
237
260
|
return undefined;
|
|
238
261
|
}
|
|
@@ -246,19 +269,19 @@ function getFields(form) {
|
|
|
246
269
|
}
|
|
247
270
|
}
|
|
248
271
|
if (!nodes.querySelector) {
|
|
249
|
-
return
|
|
272
|
+
return undefined;
|
|
250
273
|
}
|
|
251
|
-
var table = nodes.querySelector(
|
|
274
|
+
var table = nodes.querySelector("table");
|
|
252
275
|
var fields = [];
|
|
253
276
|
if (table) {
|
|
254
|
-
var thead = table.querySelector(
|
|
277
|
+
var thead = table.querySelector("thead");
|
|
255
278
|
if (thead) {
|
|
256
|
-
var ths = thead.querySelectorAll(
|
|
279
|
+
var ths = thead.querySelectorAll("th");
|
|
257
280
|
if (ths) {
|
|
258
281
|
var l = ths.length;
|
|
259
282
|
for (var i = 0; i < l; i++) {
|
|
260
283
|
var th = ths[i];
|
|
261
|
-
var field = th.getAttribute(
|
|
284
|
+
var field = th.getAttribute("data-field");
|
|
262
285
|
if (field) {
|
|
263
286
|
fields.push(field);
|
|
264
287
|
}
|
|
@@ -266,7 +289,7 @@ function getFields(form) {
|
|
|
266
289
|
}
|
|
267
290
|
}
|
|
268
291
|
}
|
|
269
|
-
return fields;
|
|
292
|
+
return fields.length > 0 ? fields : undefined;
|
|
270
293
|
}
|
|
271
294
|
exports.getFields = getFields;
|
|
272
295
|
function formatResultsByComponent(results, c, lc) {
|
|
@@ -344,9 +367,34 @@ function getPageTotal(pageSize, total) {
|
|
|
344
367
|
}
|
|
345
368
|
}
|
|
346
369
|
exports.getPageTotal = getPageTotal;
|
|
347
|
-
function
|
|
370
|
+
function formatText() {
|
|
371
|
+
var args = [];
|
|
372
|
+
for (var _i = 0; _i < arguments.length; _i++) {
|
|
373
|
+
args[_i] = arguments[_i];
|
|
374
|
+
}
|
|
375
|
+
var formatted = args[0];
|
|
376
|
+
if (!formatted || formatted === "") {
|
|
377
|
+
return "";
|
|
378
|
+
}
|
|
379
|
+
if (args.length > 1 && Array.isArray(args[1])) {
|
|
380
|
+
var params = args[1];
|
|
381
|
+
for (var i = 0; i < params.length; i++) {
|
|
382
|
+
var regexp = new RegExp("\\{" + i + "\\}", "gi");
|
|
383
|
+
formatted = formatted.replace(regexp, params[i]);
|
|
384
|
+
}
|
|
385
|
+
}
|
|
386
|
+
else {
|
|
387
|
+
for (var i = 1; i < args.length; i++) {
|
|
388
|
+
var regexp = new RegExp("\\{" + (i - 1) + "\\}", "gi");
|
|
389
|
+
formatted = formatted.replace(regexp, args[i]);
|
|
390
|
+
}
|
|
391
|
+
}
|
|
392
|
+
return formatted;
|
|
393
|
+
}
|
|
394
|
+
exports.formatText = formatText;
|
|
395
|
+
function buildMessage(resource, results, pageSize, pageIndex, total) {
|
|
348
396
|
if (!results || results.length === 0) {
|
|
349
|
-
return
|
|
397
|
+
return resource.msg_no_data_found;
|
|
350
398
|
}
|
|
351
399
|
else {
|
|
352
400
|
if (!pageIndex) {
|
|
@@ -356,11 +404,11 @@ function buildMessage(r, pageIndex, pageSize, results, total) {
|
|
|
356
404
|
var toIndex = fromIndex + results.length - 1;
|
|
357
405
|
var pageTotal = getPageTotal(pageSize, total);
|
|
358
406
|
if (pageTotal > 1) {
|
|
359
|
-
var msg2 =
|
|
407
|
+
var msg2 = formatText(resource.msg_search_result_page_sequence, fromIndex, toIndex, total, pageIndex, pageTotal);
|
|
360
408
|
return msg2;
|
|
361
409
|
}
|
|
362
410
|
else {
|
|
363
|
-
var msg3 =
|
|
411
|
+
var msg3 = formatText(resource.msg_search_result_sequence, fromIndex, toIndex);
|
|
364
412
|
return msg3;
|
|
365
413
|
}
|
|
366
414
|
}
|
|
@@ -480,6 +528,50 @@ function addParametersIntoUrl(ft, isFirstLoad, fields, limit) {
|
|
|
480
528
|
}
|
|
481
529
|
}
|
|
482
530
|
exports.addParametersIntoUrl = addParametersIntoUrl;
|
|
531
|
+
function buildSort(filter) {
|
|
532
|
+
var sort = {};
|
|
533
|
+
var st = filter.sort;
|
|
534
|
+
if (st && st.length > 0) {
|
|
535
|
+
var ch = st.charAt(0);
|
|
536
|
+
if (ch === "+" || ch === "-") {
|
|
537
|
+
sort.field = st.substring(1);
|
|
538
|
+
sort.type = ch;
|
|
539
|
+
}
|
|
540
|
+
else {
|
|
541
|
+
sort.field = st;
|
|
542
|
+
sort.type = "";
|
|
543
|
+
}
|
|
544
|
+
}
|
|
545
|
+
return sort;
|
|
546
|
+
}
|
|
547
|
+
exports.buildSort = buildSort;
|
|
548
|
+
function buildSortFilter(obj, sortable) {
|
|
549
|
+
var filter = reflect_1.clone(obj);
|
|
550
|
+
if (sortable.sortField && sortable.sortField.length > 0) {
|
|
551
|
+
filter.sort = sortable.sortType === "-" ? "-" + sortable.sortField : sortable.sortField;
|
|
552
|
+
}
|
|
553
|
+
else {
|
|
554
|
+
delete filter.sort;
|
|
555
|
+
}
|
|
556
|
+
delete filter.fields;
|
|
557
|
+
return filter;
|
|
558
|
+
}
|
|
559
|
+
exports.buildSortFilter = buildSortFilter;
|
|
560
|
+
function handleToggle(target, on) {
|
|
561
|
+
var off = !on;
|
|
562
|
+
if (target) {
|
|
563
|
+
if (on) {
|
|
564
|
+
if (!target.classList.contains('on')) {
|
|
565
|
+
target.classList.add('on');
|
|
566
|
+
}
|
|
567
|
+
}
|
|
568
|
+
else {
|
|
569
|
+
target.classList.remove('on');
|
|
570
|
+
}
|
|
571
|
+
}
|
|
572
|
+
return off;
|
|
573
|
+
}
|
|
574
|
+
exports.handleToggle = handleToggle;
|
|
483
575
|
function handleSortEvent(event, com) {
|
|
484
576
|
if (event && event.target) {
|
|
485
577
|
var target = event.target;
|
|
@@ -490,6 +582,10 @@ function handleSortEvent(event, com) {
|
|
|
490
582
|
}
|
|
491
583
|
}
|
|
492
584
|
exports.handleSortEvent = handleSortEvent;
|
|
585
|
+
function getSortElement(target) {
|
|
586
|
+
return target.nodeName === "I" ? target.parentElement : target;
|
|
587
|
+
}
|
|
588
|
+
exports.getSortElement = getSortElement;
|
|
493
589
|
function handleSort(target, previousTarget, sortField, sortType) {
|
|
494
590
|
var type = target.getAttribute('sort-type');
|
|
495
591
|
var field = toggleSortStyle(target);
|
package/lib/useSearch.js
CHANGED
|
@@ -132,9 +132,8 @@ exports.useCoreSearch = function (refForm, initialState, service, p1, p2) {
|
|
|
132
132
|
var getCurrencyCode = p && p.getCurrencyCode ? p.getCurrencyCode : _getCurrencyCode;
|
|
133
133
|
var _c = merge_1.useMergeState(p), component = _c[0], setComponent = _c[1];
|
|
134
134
|
var toggleFilter = function (event) {
|
|
135
|
-
var
|
|
136
|
-
|
|
137
|
-
setComponent({ hideFilter: x });
|
|
135
|
+
var hideFilter = search_1.handleToggle(event.target, component.hideFilter);
|
|
136
|
+
setComponent({ hideFilter: hideFilter });
|
|
138
137
|
};
|
|
139
138
|
var _getFields = function () {
|
|
140
139
|
var fields = component.fields, initFields = component.initFields;
|
|
@@ -331,7 +330,7 @@ exports.useCoreSearch = function (refForm, initialState, service, p1, p2) {
|
|
|
331
330
|
setList(results, setState);
|
|
332
331
|
setComponent({ tmpPageIndex: s.page });
|
|
333
332
|
if (s.limit) {
|
|
334
|
-
var m1 = search_1.buildMessage(p1.resource,
|
|
333
|
+
var m1 = search_1.buildMessage(p1.resource.resource(), sr.list, s.limit, s.page, sr.total);
|
|
335
334
|
p1.showMessage(m1);
|
|
336
335
|
}
|
|
337
336
|
}
|
package/package.json
CHANGED
package/src/core.ts
CHANGED
|
@@ -395,9 +395,9 @@ export function initForm(form?: HTMLFormElement, initMat?: (f: HTMLFormElement)
|
|
|
395
395
|
}
|
|
396
396
|
return form;
|
|
397
397
|
}
|
|
398
|
-
export function error(err: any, gv: (key: string) => string, ae: (msg: string, callback?: () => void, header?: string) => void) {
|
|
399
|
-
const title =
|
|
400
|
-
let msg =
|
|
398
|
+
export function error(err: any, gv: StringMap | ((key: string) => string), ae: (msg: string, callback?: () => void, header?: string) => void) {
|
|
399
|
+
const title = getString('error', gv);
|
|
400
|
+
let msg = getString('error_internal', gv);
|
|
401
401
|
if (!err) {
|
|
402
402
|
ae(msg, undefined, title);
|
|
403
403
|
return;
|
|
@@ -502,14 +502,3 @@ export function getDecodeFromForm(u?: UIParameter, d?: (form: HTMLFormElement, l
|
|
|
502
502
|
return (u && u.ui ? u.ui.decodeFromForm : undefined);
|
|
503
503
|
}
|
|
504
504
|
*/
|
|
505
|
-
export function handleToggle(target?: HTMLInputElement, on?: boolean): void {
|
|
506
|
-
if (target) {
|
|
507
|
-
if (on) {
|
|
508
|
-
if (!target.classList.contains('on')) {
|
|
509
|
-
target.classList.add('on');
|
|
510
|
-
}
|
|
511
|
-
} else {
|
|
512
|
-
target.classList.remove('on');
|
|
513
|
-
}
|
|
514
|
-
}
|
|
515
|
-
}
|
package/src/input.ts
CHANGED
|
@@ -49,9 +49,9 @@ export function getMsgFunc(p: ResourceService|ShowMessageInput, showMsg?: (msg:
|
|
|
49
49
|
return (p as any).showMessage;
|
|
50
50
|
}
|
|
51
51
|
interface ConfirmInput {
|
|
52
|
-
confirm: (m2: string,
|
|
52
|
+
confirm: (m2: string, yesCallback?: () => void, header?: string, btnLeftText?: string, btnRightText?: string, noCallback?: () => void) => void;
|
|
53
53
|
}
|
|
54
|
-
export function getConfirmFunc(p: ResourceService|ConfirmInput, cf?: (m2: string,
|
|
54
|
+
export function getConfirmFunc(p: ResourceService|ConfirmInput, cf?: (m2: string, yesCallback?: () => void, header?: string, btnLeftText?: string, btnRightText?: string, noCallback?: () => void) => void): (m2: string, yesCallback?: () => void, header?: string, btnLeftText?: string, btnRightText?: string, noCallback?: () => void) => void {
|
|
55
55
|
if (cf) {
|
|
56
56
|
return cf;
|
|
57
57
|
}
|
|
@@ -67,9 +67,9 @@ export function getLocaleFunc(p: ResourceService|GetLocaleInput, getLoc?: () =>
|
|
|
67
67
|
return (p as any).getLocale;
|
|
68
68
|
}
|
|
69
69
|
interface ShowErrorInput {
|
|
70
|
-
showError: (m: string,
|
|
70
|
+
showError: (m: string, callback?: () => void, header?: string) => void;
|
|
71
71
|
}
|
|
72
|
-
export function getErrorFunc(p: ResourceService|ShowErrorInput, showErr?: (m: string,
|
|
72
|
+
export function getErrorFunc(p: ResourceService|ShowErrorInput, showErr?: (m: string, callback?: () => void, header?: string) => void): (m: string, callback?: () => void, header?: string) => void {
|
|
73
73
|
if (showErr) {
|
|
74
74
|
return showErr;
|
|
75
75
|
}
|
package/src/reflect.ts
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { NavigateFunction } from "react-router-dom"
|
|
2
|
+
|
|
1
3
|
export function clone(obj: any): any {
|
|
2
4
|
if (!obj) {
|
|
3
5
|
return obj;
|
|
@@ -135,6 +137,28 @@ export function makeDiff<T>(o1: T, o2: T, keys?: string[], version?: string): Pa
|
|
|
135
137
|
}
|
|
136
138
|
return obj3;
|
|
137
139
|
}
|
|
140
|
+
export function hasDiff<T>(o1: T, o2: T, keys?: string[], version?: string): boolean {
|
|
141
|
+
const diff = makeDiff(o1, o2, keys, version)
|
|
142
|
+
return !isEmptyObject(diff)
|
|
143
|
+
}
|
|
144
|
+
interface StringMap {
|
|
145
|
+
[key: string]: string;
|
|
146
|
+
}
|
|
147
|
+
export function goBack<T>(
|
|
148
|
+
navigate: NavigateFunction,
|
|
149
|
+
confirm: (msg: string, yesCallback?: () => void) => void,
|
|
150
|
+
resource: StringMap,
|
|
151
|
+
o1: T,
|
|
152
|
+
o2: T,
|
|
153
|
+
keys?: string[],
|
|
154
|
+
version?: string,
|
|
155
|
+
) {
|
|
156
|
+
if (!hasDiff(o1, o2, keys, version)) {
|
|
157
|
+
navigate(-1)
|
|
158
|
+
} else {
|
|
159
|
+
confirm(resource.msg_confirm_back, () => navigate(-1))
|
|
160
|
+
}
|
|
161
|
+
}
|
|
138
162
|
|
|
139
163
|
export function notIn(s1: string[], s2: string[]): string[] {
|
|
140
164
|
const r = [];
|
package/src/search.ts
CHANGED
|
@@ -1,6 +1,11 @@
|
|
|
1
|
+
import { StringMap } from "./core";
|
|
2
|
+
import { clone } from "./reflect";
|
|
3
|
+
|
|
1
4
|
// tslint:disable-next-line:class-name
|
|
2
5
|
export class resources {
|
|
3
6
|
static limit = 24;
|
|
7
|
+
static pages = [12, 24, 60, 100, 120, 180, 300, 600];
|
|
8
|
+
static pageMaxSize = 7;
|
|
4
9
|
}
|
|
5
10
|
interface Filter {
|
|
6
11
|
page?: number;
|
|
@@ -49,32 +54,47 @@ export interface Pagination {
|
|
|
49
54
|
interface Searchable extends Pagination, Sortable {
|
|
50
55
|
}
|
|
51
56
|
|
|
52
|
-
export function
|
|
53
|
-
|
|
57
|
+
export function getOffset(limit: number, page?: number, firstLimit?: number): number {
|
|
58
|
+
const p = page && page > 0 ? page : 1
|
|
59
|
+
if (firstLimit && firstLimit > 0) {
|
|
60
|
+
const offset = limit * (p - 2) + firstLimit
|
|
61
|
+
return offset < 0 ? 0 : offset
|
|
62
|
+
} else {
|
|
63
|
+
const offset = limit * (p - 1)
|
|
64
|
+
return offset < 0 ? 0 : offset
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
export function mergeFilter<S extends Filter>(obj: S, b?: S, pageSizes?: number[], arrs?: string[] | any) {
|
|
68
|
+
let a: any = b
|
|
54
69
|
if (!b) {
|
|
55
|
-
a = {}
|
|
70
|
+
a = {}
|
|
56
71
|
}
|
|
57
|
-
const
|
|
72
|
+
const keys = Object.keys(obj)
|
|
73
|
+
for (const key of keys) {
|
|
74
|
+
const p = a[key]
|
|
75
|
+
const v = (obj as any)[key]
|
|
76
|
+
if (v && v !== "") {
|
|
77
|
+
a[key] = isArray(key, p, arrs) ? v.split(",") : v
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
const spage: any = obj["page"]
|
|
81
|
+
if (!isNaN(spage)) {
|
|
82
|
+
const page = parseInt(spage, 10)
|
|
83
|
+
a.page = page > 1 ? page : undefined
|
|
84
|
+
}
|
|
85
|
+
const slimit: any = obj["limit"]
|
|
58
86
|
if (!isNaN(slimit)) {
|
|
59
|
-
const limit = parseInt(slimit, 10)
|
|
87
|
+
const limit = parseInt(slimit, 10)
|
|
60
88
|
if (pageSizes && pageSizes.length > 0) {
|
|
61
89
|
if (pageSizes.indexOf(limit) >= 0) {
|
|
62
|
-
a.limit = limit
|
|
90
|
+
a.limit = limit
|
|
91
|
+
return a
|
|
63
92
|
}
|
|
64
93
|
} else {
|
|
65
|
-
a.limit = limit
|
|
94
|
+
a.limit = limit > 0 ? limit : 12
|
|
66
95
|
}
|
|
67
96
|
}
|
|
68
|
-
|
|
69
|
-
const keys = Object.keys(obj);
|
|
70
|
-
for (const key of keys) {
|
|
71
|
-
const p = a[key];
|
|
72
|
-
const v = (obj as any)[key];
|
|
73
|
-
if (v && v !== '') {
|
|
74
|
-
a[key] = (isArray(key, p, arrs) ? v.split(',') : v);
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
return a;
|
|
97
|
+
return a
|
|
78
98
|
}
|
|
79
99
|
export function isArray(key: string, p: any, arrs: string[]|any): boolean {
|
|
80
100
|
if (p) {
|
|
@@ -268,40 +288,43 @@ export function showPaging<T>(com: Pagination, list: T[], pageSize?: number, tot
|
|
|
268
288
|
com.showPaging = (!total || com.pages <= 1 || (list && list.length >= total) ? false : true);
|
|
269
289
|
}
|
|
270
290
|
|
|
271
|
-
export function getFields(form?: HTMLFormElement): string[]|undefined {
|
|
291
|
+
export function getFields(form?: HTMLFormElement, arr?: string[]): string[] | undefined {
|
|
292
|
+
if (arr && arr.length > 0) {
|
|
293
|
+
return arr
|
|
294
|
+
}
|
|
272
295
|
if (!form) {
|
|
273
|
-
return undefined
|
|
296
|
+
return undefined
|
|
274
297
|
}
|
|
275
|
-
let nodes = form.nextSibling as HTMLElement
|
|
298
|
+
let nodes = form.nextSibling as HTMLElement
|
|
276
299
|
if (!nodes.querySelector) {
|
|
277
300
|
if (!form.nextSibling) {
|
|
278
|
-
return []
|
|
301
|
+
return []
|
|
279
302
|
} else {
|
|
280
|
-
nodes = form.nextSibling.nextSibling as HTMLElement
|
|
303
|
+
nodes = form.nextSibling.nextSibling as HTMLElement
|
|
281
304
|
}
|
|
282
305
|
}
|
|
283
306
|
if (!nodes.querySelector) {
|
|
284
|
-
return
|
|
307
|
+
return undefined
|
|
285
308
|
}
|
|
286
|
-
const table = nodes.querySelector(
|
|
287
|
-
const fields: string[] = []
|
|
309
|
+
const table = nodes.querySelector("table")
|
|
310
|
+
const fields: string[] = []
|
|
288
311
|
if (table) {
|
|
289
|
-
const thead = table.querySelector(
|
|
312
|
+
const thead = table.querySelector("thead")
|
|
290
313
|
if (thead) {
|
|
291
|
-
const ths = thead.querySelectorAll(
|
|
314
|
+
const ths = thead.querySelectorAll("th")
|
|
292
315
|
if (ths) {
|
|
293
|
-
const l = ths.length
|
|
316
|
+
const l = ths.length
|
|
294
317
|
for (let i = 0; i < l; i++) {
|
|
295
|
-
const
|
|
296
|
-
const field = th.getAttribute(
|
|
318
|
+
const th = ths[i]
|
|
319
|
+
const field = th.getAttribute("data-field")
|
|
297
320
|
if (field) {
|
|
298
|
-
fields.push(field)
|
|
321
|
+
fields.push(field)
|
|
299
322
|
}
|
|
300
323
|
}
|
|
301
324
|
}
|
|
302
325
|
}
|
|
303
326
|
}
|
|
304
|
-
return fields
|
|
327
|
+
return fields.length > 0 ? fields : undefined
|
|
305
328
|
}
|
|
306
329
|
interface Component<T> {
|
|
307
330
|
pageIndex?: number;
|
|
@@ -376,22 +399,41 @@ export function getPageTotal(pageSize?: number, total?: number): number {
|
|
|
376
399
|
}
|
|
377
400
|
}
|
|
378
401
|
|
|
379
|
-
export function
|
|
402
|
+
export function formatText(...args: any[]): string {
|
|
403
|
+
let formatted = args[0]
|
|
404
|
+
if (!formatted || formatted === "") {
|
|
405
|
+
return ""
|
|
406
|
+
}
|
|
407
|
+
if (args.length > 1 && Array.isArray(args[1])) {
|
|
408
|
+
const params = args[1]
|
|
409
|
+
for (let i = 0; i < params.length; i++) {
|
|
410
|
+
const regexp = new RegExp("\\{" + i + "\\}", "gi")
|
|
411
|
+
formatted = formatted.replace(regexp, params[i])
|
|
412
|
+
}
|
|
413
|
+
} else {
|
|
414
|
+
for (let i = 1; i < args.length; i++) {
|
|
415
|
+
const regexp = new RegExp("\\{" + (i - 1) + "\\}", "gi")
|
|
416
|
+
formatted = formatted.replace(regexp, args[i])
|
|
417
|
+
}
|
|
418
|
+
}
|
|
419
|
+
return formatted
|
|
420
|
+
}
|
|
421
|
+
export function buildMessage<T>(resource: StringMap, results: T[], pageSize: number, pageIndex: number | undefined, total?: number): string {
|
|
380
422
|
if (!results || results.length === 0) {
|
|
381
|
-
return
|
|
423
|
+
return resource.msg_no_data_found
|
|
382
424
|
} else {
|
|
383
425
|
if (!pageIndex) {
|
|
384
|
-
pageIndex = 1
|
|
426
|
+
pageIndex = 1
|
|
385
427
|
}
|
|
386
|
-
const fromIndex = (pageIndex - 1) * pageSize + 1
|
|
387
|
-
const toIndex = fromIndex + results.length - 1
|
|
388
|
-
const pageTotal = getPageTotal(pageSize, total)
|
|
428
|
+
const fromIndex = (pageIndex - 1) * pageSize + 1
|
|
429
|
+
const toIndex = fromIndex + results.length - 1
|
|
430
|
+
const pageTotal = getPageTotal(pageSize, total)
|
|
389
431
|
if (pageTotal > 1) {
|
|
390
|
-
const msg2 =
|
|
391
|
-
return msg2
|
|
432
|
+
const msg2 = formatText(resource.msg_search_result_page_sequence, fromIndex, toIndex, total, pageIndex, pageTotal)
|
|
433
|
+
return msg2
|
|
392
434
|
} else {
|
|
393
|
-
const msg3 =
|
|
394
|
-
return msg3
|
|
435
|
+
const msg3 = formatText(resource.msg_search_result_sequence, fromIndex, toIndex)
|
|
436
|
+
return msg3
|
|
395
437
|
}
|
|
396
438
|
}
|
|
397
439
|
}
|
|
@@ -501,7 +543,44 @@ export interface Sort {
|
|
|
501
543
|
field?: string;
|
|
502
544
|
type?: string;
|
|
503
545
|
}
|
|
504
|
-
|
|
546
|
+
export function buildSort<F extends Filter>(filter: F): Sort {
|
|
547
|
+
const sort: Sort = {}
|
|
548
|
+
const st = filter.sort
|
|
549
|
+
if (st && st.length > 0) {
|
|
550
|
+
const ch = st.charAt(0)
|
|
551
|
+
if (ch === "+" || ch === "-") {
|
|
552
|
+
sort.field = st.substring(1)
|
|
553
|
+
sort.type = ch
|
|
554
|
+
} else {
|
|
555
|
+
sort.field = st
|
|
556
|
+
sort.type = ""
|
|
557
|
+
}
|
|
558
|
+
}
|
|
559
|
+
return sort
|
|
560
|
+
}
|
|
561
|
+
export function buildSortFilter<S extends Filter>(obj: S, sortable: Sortable): S {
|
|
562
|
+
const filter: any = clone(obj)
|
|
563
|
+
if (sortable.sortField && sortable.sortField.length > 0) {
|
|
564
|
+
filter.sort = sortable.sortType === "-" ? "-" + sortable.sortField : sortable.sortField
|
|
565
|
+
} else {
|
|
566
|
+
delete filter.sort
|
|
567
|
+
}
|
|
568
|
+
delete filter.fields
|
|
569
|
+
return filter
|
|
570
|
+
}
|
|
571
|
+
export function handleToggle(target?: HTMLInputElement, on?: boolean): boolean {
|
|
572
|
+
const off = !on
|
|
573
|
+
if (target) {
|
|
574
|
+
if (on) {
|
|
575
|
+
if (!target.classList.contains('on')) {
|
|
576
|
+
target.classList.add('on');
|
|
577
|
+
}
|
|
578
|
+
} else {
|
|
579
|
+
target.classList.remove('on');
|
|
580
|
+
}
|
|
581
|
+
}
|
|
582
|
+
return off
|
|
583
|
+
}
|
|
505
584
|
export function handleSortEvent(event: Event, com: Sortable): void {
|
|
506
585
|
if (event && event.target) {
|
|
507
586
|
const target = event.target as HTMLElement;
|
|
@@ -512,6 +591,9 @@ export function handleSortEvent(event: Event, com: Sortable): void {
|
|
|
512
591
|
}
|
|
513
592
|
}
|
|
514
593
|
|
|
594
|
+
export function getSortElement(target: HTMLElement): HTMLElement {
|
|
595
|
+
return target.nodeName === "I" ? (target.parentElement as HTMLElement) : target
|
|
596
|
+
}
|
|
515
597
|
export function handleSort(target: HTMLElement, previousTarget?: HTMLElement, sortField?: string, sortType?: string): Sort {
|
|
516
598
|
const type = target.getAttribute('sort-type');
|
|
517
599
|
const field = toggleSortStyle(target);
|
package/src/useSearch.ts
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import {useEffect, useState} from 'react';
|
|
2
|
-
import {error, getName, getRemoveError, getValidateForm,
|
|
2
|
+
import {error, getName, getRemoveError, getValidateForm, hideLoading, initForm, Locale, PageChange, pageSizes, removeFormError, ResourceService, SearchParameter, SearchResult, SearchService, showLoading} from './core';
|
|
3
3
|
import {DispatchWithCallback, useMergeState} from './merge';
|
|
4
4
|
import {clone} from './reflect';
|
|
5
5
|
import {buildFromUrl} from './route';
|
|
6
|
-
import {addParametersIntoUrl, append, buildMessage, formatResults, getFieldsFromForm, getModel, handleAppend, handleSort, initFilter, mergeFilter as mergeFilter2, Pagination, removeSortStatus, showPaging, Sortable, validate} from './search';
|
|
6
|
+
import {addParametersIntoUrl, append, buildMessage, formatResults, getFieldsFromForm, getModel, handleAppend, handleSort, handleToggle, initFilter, mergeFilter as mergeFilter2, Pagination, removeSortStatus, showPaging, Sortable, validate} from './search';
|
|
7
7
|
import {enLocale} from './state';
|
|
8
8
|
import {useUpdate} from './update';
|
|
9
9
|
|
|
@@ -257,9 +257,8 @@ export const useCoreSearch = <T, S extends Filter, ST>(
|
|
|
257
257
|
const [component, setComponent] = useMergeState<SearchComponentState<T, S>>(p);
|
|
258
258
|
|
|
259
259
|
const toggleFilter = (event: React.MouseEvent<HTMLButtonElement, MouseEvent>): void => {
|
|
260
|
-
const
|
|
261
|
-
|
|
262
|
-
setComponent({ hideFilter: x });
|
|
260
|
+
const hideFilter = handleToggle(event.target as HTMLInputElement, component.hideFilter);
|
|
261
|
+
setComponent({ hideFilter });
|
|
263
262
|
};
|
|
264
263
|
|
|
265
264
|
const _getFields = (): string[]|undefined => {
|
|
@@ -464,7 +463,7 @@ export const useCoreSearch = <T, S extends Filter, ST>(
|
|
|
464
463
|
setList(results, setState as any);
|
|
465
464
|
setComponent({ tmpPageIndex: s.page });
|
|
466
465
|
if (s.limit) {
|
|
467
|
-
const m1 = buildMessage(p1.resource,
|
|
466
|
+
const m1 = buildMessage(p1.resource.resource(), sr.list, s.limit, s.page, sr.total);
|
|
468
467
|
p1.showMessage(m1);
|
|
469
468
|
}
|
|
470
469
|
}
|