intable 0.0.55 → 0.0.57
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/AndOrFields.js +165 -124
- package/package.json +1 -1
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { resolveOptions } from "../utils.js";
|
|
2
2
|
import { AndOr } from "./AndOr.js";
|
|
3
|
-
import { className, createComponent, delegateEvents, effect, insert, memo, mergeProps, setAttribute, template } from "solid-js/web";
|
|
3
|
+
import { className, createComponent, delegateEvents, effect, insert, memo, mergeProps, setAttribute, spread, template } from "solid-js/web";
|
|
4
4
|
import { Match, Switch, createMemo } from "solid-js";
|
|
5
|
-
var _tmpl$ = /* @__PURE__ */ template("<
|
|
6
|
-
function isValueFreeOp(
|
|
7
|
-
return VALUE_FREE_RULES.includes(
|
|
5
|
+
var _tmpl$ = /* @__PURE__ */ template("<input>"), _tmpl$2 = /* @__PURE__ */ template("<input type=number>"), _tmpl$3 = /* @__PURE__ */ template("<input type=date>"), _tmpl$4 = /* @__PURE__ */ template("<div class=\"flex-1 flex items-center gap-1\"><input placeholder=开始><span class=\"text-xs c-gray/70\">~</span><input placeholder=结束>"), _tmpl$5 = /* @__PURE__ */ template("<div class=\"flex items-center gap-2\">"), _tmpl$6 = /* @__PURE__ */ template("<select>"), _tmpl$7 = /* @__PURE__ */ template("<option value>"), _tmpl$8 = /* @__PURE__ */ template("<option>"), VALUE_FREE_RULES = ["blank", "noblank"];
|
|
6
|
+
function isValueFreeOp(c) {
|
|
7
|
+
return VALUE_FREE_RULES.includes(c);
|
|
8
8
|
}
|
|
9
9
|
const RULES_BY_TYPE = {
|
|
10
10
|
text: [
|
|
@@ -198,38 +198,38 @@ const RULES_BY_TYPE = {
|
|
|
198
198
|
}
|
|
199
199
|
]
|
|
200
200
|
};
|
|
201
|
-
function isBetweenOp(
|
|
202
|
-
return
|
|
201
|
+
function isBetweenOp(c) {
|
|
202
|
+
return c === "between" || c === "not_between";
|
|
203
203
|
}
|
|
204
|
-
function isListOp(
|
|
205
|
-
return
|
|
204
|
+
function isListOp(c) {
|
|
205
|
+
return c === "in" || c === "not_in";
|
|
206
206
|
}
|
|
207
|
-
function toPair(
|
|
208
|
-
return Array.isArray(
|
|
207
|
+
function toPair(c) {
|
|
208
|
+
return Array.isArray(c) ? [c[0] ?? "", c[1] ?? ""] : c == null || c === "" ? ["", ""] : [c, ""];
|
|
209
209
|
}
|
|
210
|
-
function toList(
|
|
211
|
-
return Array.isArray(
|
|
210
|
+
function toList(c) {
|
|
211
|
+
return Array.isArray(c) ? c : c == null || c === "" ? [] : String(c).split(",").map((c) => c.trim()).filter(Boolean);
|
|
212
212
|
}
|
|
213
|
-
const RuleValueEditor = (
|
|
214
|
-
let
|
|
213
|
+
const RuleValueEditor = (O) => {
|
|
214
|
+
let j = () => normalizeType(O.field), N = () => resolveOptions(O.enum ?? []), F = () => O.op || defaultOp(j());
|
|
215
215
|
return createComponent(Switch, {
|
|
216
216
|
get fallback() {
|
|
217
217
|
return (() => {
|
|
218
|
-
var
|
|
219
|
-
return
|
|
220
|
-
var
|
|
221
|
-
return
|
|
218
|
+
var c = _tmpl$();
|
|
219
|
+
return c.$$input = (c) => O.onChange(c.target.value), effect((A) => {
|
|
220
|
+
var j = O.class ?? "flex-1 px-2 py-1 rounded-md border", M = O.placeholder;
|
|
221
|
+
return j !== A.e && className(c, A.e = j), M !== A.t && setAttribute(c, "placeholder", A.t = M), A;
|
|
222
222
|
}, {
|
|
223
223
|
e: void 0,
|
|
224
224
|
t: void 0
|
|
225
|
-
}), effect(() =>
|
|
225
|
+
}), effect(() => c.value = O.value ?? ""), c;
|
|
226
226
|
})();
|
|
227
227
|
},
|
|
228
228
|
get children() {
|
|
229
229
|
return [
|
|
230
230
|
createComponent(Match, {
|
|
231
231
|
get when() {
|
|
232
|
-
return isValueFreeOp(
|
|
232
|
+
return isValueFreeOp(O.op || defaultOp(j()));
|
|
233
233
|
},
|
|
234
234
|
get children() {
|
|
235
235
|
return [];
|
|
@@ -237,97 +237,101 @@ const RuleValueEditor = (w) => {
|
|
|
237
237
|
}),
|
|
238
238
|
createComponent(Match, {
|
|
239
239
|
get when() {
|
|
240
|
-
return isBetweenOp(
|
|
240
|
+
return isBetweenOp(F());
|
|
241
241
|
},
|
|
242
242
|
get children() {
|
|
243
243
|
return (() => {
|
|
244
|
-
let [
|
|
244
|
+
let [c, A] = toPair(O.value), N = j() === "number" ? "number" : j() === "date" ? "date" : "text";
|
|
245
245
|
return (() => {
|
|
246
|
-
var
|
|
247
|
-
return
|
|
248
|
-
var
|
|
249
|
-
return
|
|
246
|
+
var j = _tmpl$4(), P = j.firstChild, F = P.nextSibling, I = F.nextSibling;
|
|
247
|
+
return P.$$input = (c) => O.onChange([c.target.value, A ?? ""]), setAttribute(P, "type", N), P.value = c ?? "", I.$$input = (k) => O.onChange([c ?? "", k.target.value]), setAttribute(I, "type", N), I.value = A ?? "", effect((c) => {
|
|
248
|
+
var A = O.class ?? "flex-1 px-2 py-1 rounded-md border", j = O.class ?? "flex-1 px-2 py-1 rounded-md border";
|
|
249
|
+
return A !== c.e && className(P, c.e = A), j !== c.t && className(I, c.t = j), c;
|
|
250
250
|
}, {
|
|
251
251
|
e: void 0,
|
|
252
252
|
t: void 0
|
|
253
|
-
}),
|
|
253
|
+
}), j;
|
|
254
254
|
})();
|
|
255
255
|
})();
|
|
256
256
|
}
|
|
257
257
|
}),
|
|
258
258
|
createComponent(Match, {
|
|
259
259
|
get when() {
|
|
260
|
-
return memo(() => !!isListOp(
|
|
260
|
+
return memo(() => !!isListOp(F()))() && j() === "enum";
|
|
261
261
|
},
|
|
262
262
|
get children() {
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
263
|
+
return createComponent(Select, {
|
|
264
|
+
get class() {
|
|
265
|
+
return O.class ?? "flex-1 px-2 py-1 rounded-md border";
|
|
266
|
+
},
|
|
267
|
+
multiple: !0,
|
|
268
|
+
get value() {
|
|
269
|
+
return toList(O.value).map((c) => String(c));
|
|
270
|
+
},
|
|
271
|
+
onChange: (c) => O.onChange(c),
|
|
272
|
+
get options() {
|
|
273
|
+
return N();
|
|
274
|
+
}
|
|
275
|
+
});
|
|
274
276
|
}
|
|
275
277
|
}),
|
|
276
278
|
createComponent(Match, {
|
|
277
279
|
get when() {
|
|
278
|
-
return isListOp(
|
|
280
|
+
return isListOp(F());
|
|
279
281
|
},
|
|
280
282
|
get children() {
|
|
281
|
-
var
|
|
282
|
-
return
|
|
283
|
-
var
|
|
284
|
-
return
|
|
283
|
+
var c = _tmpl$();
|
|
284
|
+
return c.$$input = (c) => O.onChange(toList(c.target.value)), effect((A) => {
|
|
285
|
+
var j = O.class ?? "flex-1 px-2 py-1 rounded-md border", M = O.placeholder ?? "多个值用逗号分隔";
|
|
286
|
+
return j !== A.e && className(c, A.e = j), M !== A.t && setAttribute(c, "placeholder", A.t = M), A;
|
|
285
287
|
}, {
|
|
286
288
|
e: void 0,
|
|
287
289
|
t: void 0
|
|
288
|
-
}), effect(() =>
|
|
290
|
+
}), effect(() => c.value = toList(O.value).join(", ")), c;
|
|
289
291
|
}
|
|
290
292
|
}),
|
|
291
293
|
createComponent(Match, {
|
|
292
294
|
get when() {
|
|
293
|
-
return
|
|
295
|
+
return j() === "number";
|
|
294
296
|
},
|
|
295
297
|
get children() {
|
|
296
|
-
var
|
|
297
|
-
return
|
|
298
|
-
var
|
|
299
|
-
return
|
|
298
|
+
var c = _tmpl$2();
|
|
299
|
+
return c.$$input = (c) => O.onChange(c.target.value), effect((A) => {
|
|
300
|
+
var j = O.class ?? "flex-1 px-2 py-1 rounded-md border", M = O.placeholder;
|
|
301
|
+
return j !== A.e && className(c, A.e = j), M !== A.t && setAttribute(c, "placeholder", A.t = M), A;
|
|
300
302
|
}, {
|
|
301
303
|
e: void 0,
|
|
302
304
|
t: void 0
|
|
303
|
-
}), effect(() =>
|
|
305
|
+
}), effect(() => c.value = O.value ?? ""), c;
|
|
304
306
|
}
|
|
305
307
|
}),
|
|
306
308
|
createComponent(Match, {
|
|
307
309
|
get when() {
|
|
308
|
-
return
|
|
310
|
+
return j() === "date";
|
|
309
311
|
},
|
|
310
312
|
get children() {
|
|
311
|
-
var
|
|
312
|
-
return
|
|
313
|
+
var c = _tmpl$3();
|
|
314
|
+
return c.$$input = (c) => O.onChange(c.target.value), effect(() => className(c, O.class ?? "flex-1 px-2 py-1 rounded-md border")), effect(() => c.value = O.value ?? ""), c;
|
|
313
315
|
}
|
|
314
316
|
}),
|
|
315
317
|
createComponent(Match, {
|
|
316
318
|
get when() {
|
|
317
|
-
return
|
|
319
|
+
return j() === "enum";
|
|
318
320
|
},
|
|
319
321
|
get children() {
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
322
|
+
return createComponent(Select, {
|
|
323
|
+
get class() {
|
|
324
|
+
return O.class ?? "flex-1 px-2 py-1 rounded-md border";
|
|
325
|
+
},
|
|
326
|
+
get value() {
|
|
327
|
+
return O.value ?? "";
|
|
328
|
+
},
|
|
329
|
+
onChange: (c) => O.onChange(c),
|
|
330
|
+
get options() {
|
|
331
|
+
return N();
|
|
332
|
+
},
|
|
333
|
+
clearable: !0
|
|
334
|
+
});
|
|
331
335
|
}
|
|
332
336
|
}),
|
|
333
337
|
createComponent(Match, {
|
|
@@ -336,89 +340,126 @@ const RuleValueEditor = (w) => {
|
|
|
336
340
|
"checkbox",
|
|
337
341
|
"switch",
|
|
338
342
|
"boolean"
|
|
339
|
-
].includes(
|
|
343
|
+
].includes(j());
|
|
340
344
|
},
|
|
341
345
|
get children() {
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
346
|
+
return createComponent(Select, {
|
|
347
|
+
get class() {
|
|
348
|
+
return O.class ?? "flex-1 px-2 py-1 rounded-md border";
|
|
349
|
+
},
|
|
350
|
+
get value() {
|
|
351
|
+
return O.value ?? "";
|
|
352
|
+
},
|
|
353
|
+
onChange: (c) => O.onChange(c),
|
|
354
|
+
options: [{
|
|
355
|
+
label: "true",
|
|
356
|
+
value: "true"
|
|
357
|
+
}, {
|
|
358
|
+
label: "false",
|
|
359
|
+
value: "false"
|
|
360
|
+
}],
|
|
361
|
+
clearable: !0
|
|
362
|
+
});
|
|
353
363
|
}
|
|
354
364
|
})
|
|
355
365
|
];
|
|
356
366
|
}
|
|
357
367
|
});
|
|
358
368
|
};
|
|
359
|
-
function normalizeType(
|
|
360
|
-
return
|
|
369
|
+
function normalizeType(c) {
|
|
370
|
+
return c?.enum ? "enum" : c?.type ?? "text";
|
|
361
371
|
}
|
|
362
|
-
function defaultOp(
|
|
363
|
-
return RULES_BY_TYPE[
|
|
372
|
+
function defaultOp(c) {
|
|
373
|
+
return RULES_BY_TYPE[c]?.[0]?.value;
|
|
364
374
|
}
|
|
365
|
-
function newRule(
|
|
366
|
-
let
|
|
375
|
+
function newRule(c, O) {
|
|
376
|
+
let k = normalizeType(c), A = defaultOp(k);
|
|
367
377
|
return {
|
|
368
|
-
field:
|
|
369
|
-
op:
|
|
370
|
-
value: VALUE_FREE_RULES.includes(
|
|
371
|
-
...
|
|
378
|
+
field: c.id,
|
|
379
|
+
op: A,
|
|
380
|
+
value: VALUE_FREE_RULES.includes(A) ? null : "",
|
|
381
|
+
...O
|
|
372
382
|
};
|
|
373
383
|
}
|
|
374
|
-
function normalizeValueByOp(
|
|
375
|
-
return VALUE_FREE_RULES.includes(
|
|
384
|
+
function normalizeValueByOp(c, O) {
|
|
385
|
+
return VALUE_FREE_RULES.includes(c) ? null : isBetweenOp(c) ? toPair(O) : isListOp(c) ? toList(O) : O ?? "";
|
|
376
386
|
}
|
|
377
|
-
const AndOrFields = (
|
|
378
|
-
let
|
|
387
|
+
const AndOrFields = (c) => createComponent(AndOr, mergeProps(c, { renderRule: (O) => {
|
|
388
|
+
let k = createMemo(() => c.fields.find((c) => c.id === O.node.field)), j = createMemo(() => normalizeType(k())), M = createMemo(() => RULES_BY_TYPE[j()]);
|
|
379
389
|
return (() => {
|
|
380
|
-
var
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
390
|
+
var P = _tmpl$5();
|
|
391
|
+
return insert(P, createComponent(Select, {
|
|
392
|
+
get class() {
|
|
393
|
+
return `px-2 py-1 rounded-md border ${c.hideFields ? "hidden" : ""}`;
|
|
394
|
+
},
|
|
395
|
+
get value() {
|
|
396
|
+
return O.node.field;
|
|
397
|
+
},
|
|
398
|
+
onChange: (k) => {
|
|
399
|
+
let A = c.fields.find((c) => c.id === k);
|
|
400
|
+
O.update(newRule(A, { field: k }));
|
|
401
|
+
},
|
|
402
|
+
get options() {
|
|
403
|
+
return c.fields.map((c) => ({
|
|
404
|
+
label: c.name ?? c.id,
|
|
405
|
+
value: c.id
|
|
406
|
+
}));
|
|
407
|
+
},
|
|
408
|
+
placeholder: "选择字段"
|
|
409
|
+
}), null), insert(P, createComponent(Select, {
|
|
410
|
+
class: "px-2 py-1 rounded-md border",
|
|
411
|
+
get value() {
|
|
412
|
+
return O.node.op || defaultOp(j());
|
|
413
|
+
},
|
|
414
|
+
onChange: (c) => {
|
|
415
|
+
O.update({
|
|
416
|
+
op: c,
|
|
417
|
+
value: normalizeValueByOp(c, O.node.value)
|
|
418
|
+
});
|
|
419
|
+
},
|
|
420
|
+
get options() {
|
|
421
|
+
return M();
|
|
422
|
+
}
|
|
423
|
+
}), null), insert(P, createComponent(RuleValueEditor, {
|
|
399
424
|
get field() {
|
|
400
|
-
return
|
|
425
|
+
return k();
|
|
401
426
|
},
|
|
402
427
|
get op() {
|
|
403
|
-
return
|
|
428
|
+
return O.node.op;
|
|
404
429
|
},
|
|
405
430
|
get value() {
|
|
406
|
-
return
|
|
431
|
+
return O.node.value;
|
|
407
432
|
},
|
|
408
433
|
get enum() {
|
|
409
|
-
return
|
|
434
|
+
return k()?.enum;
|
|
410
435
|
},
|
|
411
436
|
class: "flex-1 px-2 py-1 rounded-md border",
|
|
412
|
-
onChange: (
|
|
413
|
-
}), null),
|
|
414
|
-
var D = `px-2 py-1 rounded-md border ${o.hideFields ? "hidden" : ""}`, O = w.node.field, k = w.node.op || defaultOp(A());
|
|
415
|
-
return D !== E.e && className(N, E.e = D), O !== E.t && (N.value = E.t = O), k !== E.a && (P.value = E.a = k), E;
|
|
416
|
-
}, {
|
|
417
|
-
e: void 0,
|
|
418
|
-
t: void 0,
|
|
419
|
-
a: void 0
|
|
420
|
-
}), M;
|
|
437
|
+
onChange: (c) => O.update({ value: c })
|
|
438
|
+
}), null), P;
|
|
421
439
|
})();
|
|
422
440
|
} }));
|
|
441
|
+
var Select = (c) => (() => {
|
|
442
|
+
var O = _tmpl$6();
|
|
443
|
+
return spread(O, mergeProps(c, {
|
|
444
|
+
options: null,
|
|
445
|
+
clearable: null,
|
|
446
|
+
get class() {
|
|
447
|
+
return c.class ?? "flex-1 px-2 py-1 rounded-md border";
|
|
448
|
+
},
|
|
449
|
+
onChange: (O) => {
|
|
450
|
+
let k = O.target;
|
|
451
|
+
c.onChange?.(k.multiple ? [...k.selectedOptions].map((c) => c.value) : k.value);
|
|
452
|
+
}
|
|
453
|
+
}), !1, !0), insert(O, (() => {
|
|
454
|
+
var O = memo(() => !!(c.clearable || c.placeholder));
|
|
455
|
+
return () => O() && (() => {
|
|
456
|
+
var O = _tmpl$7();
|
|
457
|
+
return insert(O, () => c.placeholder), effect(() => O.disabled = !c.clearable), O;
|
|
458
|
+
})();
|
|
459
|
+
})(), null), insert(O, () => c.options?.map((O) => (() => {
|
|
460
|
+
var k = _tmpl$8();
|
|
461
|
+
return insert(k, () => O.label), effect(() => k.selected = O.value === c.value), effect(() => k.value = O.value), k;
|
|
462
|
+
})()), null), effect(() => O.value = c.value), O;
|
|
463
|
+
})();
|
|
423
464
|
delegateEvents(["input"]);
|
|
424
465
|
export { AndOrFields, RULES_BY_TYPE, RuleValueEditor, isValueFreeOp, newRule, normalizeType };
|