@nocobase/client 2.0.14 → 2.0.16

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/index.mjs CHANGED
@@ -875,6 +875,9 @@ const bp = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
875
875
  get removeNullCondition() {
876
876
  return removeNullCondition;
877
877
  },
878
+ get resolveFilterPickerFormat() {
879
+ return resolveFilterPickerFormat;
880
+ },
878
881
  get storePopupContext() {
879
882
  return storePopupContext;
880
883
  },
@@ -4107,6 +4110,9 @@ const bp = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
4107
4110
  get resolveDefaultCustomFieldOperator() {
4108
4111
  return resolveDefaultCustomFieldOperator;
4109
4112
  },
4113
+ get resolveFilterPickerFormat() {
4114
+ return resolveFilterPickerFormat;
4115
+ },
4110
4116
  get reverseFieldProperties() {
4111
4117
  return reverseFieldProperties;
4112
4118
  },
@@ -9955,7 +9961,7 @@ function addAppVersion(e, t) {
9955
9961
  addAppVersion((n = e.properties) == null ? void 0 : n[o], t);
9956
9962
  }), e;
9957
9963
  }
9958
- const name = "@nocobase/client", version = "2.0.14", license = "Apache-2.0", main = "lib/index.js", module = "es/index.mjs", types = "es/index.d.ts", dependencies = {
9964
+ const name = "@nocobase/client", version = "2.0.16", license = "Apache-2.0", main = "lib/index.js", module = "es/index.mjs", types = "es/index.d.ts", dependencies = {
9959
9965
  "@ahooksjs/use-url-state": "3.5.1",
9960
9966
  "@ant-design/cssinjs": "^1.11.1",
9961
9967
  "@ant-design/icons": "^5.6.1",
@@ -9978,10 +9984,10 @@ const name = "@nocobase/client", version = "2.0.14", license = "Apache-2.0", mai
9978
9984
  "@formily/reactive-react": "^2.2.27",
9979
9985
  "@formily/shared": "^2.2.27",
9980
9986
  "@formily/validator": "^2.2.27",
9981
- "@nocobase/evaluators": "2.0.14",
9982
- "@nocobase/flow-engine": "2.0.14",
9983
- "@nocobase/sdk": "2.0.14",
9984
- "@nocobase/utils": "2.0.14",
9987
+ "@nocobase/evaluators": "2.0.16",
9988
+ "@nocobase/flow-engine": "2.0.16",
9989
+ "@nocobase/sdk": "2.0.16",
9990
+ "@nocobase/utils": "2.0.16",
9985
9991
  "@tanstack/react-table": "^8.21.3",
9986
9992
  "@types/tabulator-tables": "^6.2.6",
9987
9993
  "acorn-jsx": "^5.3.2",
@@ -14311,7 +14317,10 @@ ReadPretty$d.DateRangePicker = function(t) {
14311
14317
  return /* @__PURE__ */ jsx("div", { className: classNames(o, t.className), style: t.style, children: r() });
14312
14318
  };
14313
14319
  ReadPretty$d.DatePicker = withPopupWrapper(ReadPretty$d.DatePicker);
14314
- const DatePickerContext = React.createContext({ utc: !0 }), useDatePickerContext = () => React.useContext(DatePickerContext), DatePickerProvider = DatePickerContext.Provider, InternalDatePicker = connect(DatePicker$1, mapProps(mapDatePicker()), mapReadPretty(ReadPretty$d.DatePicker)), InternalRangePicker = connect(
14320
+ const stripTimeFromFormat$3 = (e) => e && e.replace(/\s*[Hh]{1,2}:mm(?::ss)?(?:\.SSS)?(?:\s*[aA])?/g, "").trim(), resolveFilterPickerFormat = (e) => {
14321
+ const { targetPicker: t, picker: o = "date", format: n, dateFormat: r, showTime: i, timeFormat: a } = e, l = r || n, c = t === o && l ? l : getPickerFormat(t), u = t === "date" ? stripTimeFromFormat$3(c) : c;
14322
+ return getDateTimeFormat(t, u, i, a);
14323
+ }, DatePickerContext = React.createContext({ utc: !0 }), useDatePickerContext = () => React.useContext(DatePickerContext), DatePickerProvider = DatePickerContext.Provider, InternalDatePicker = connect(DatePicker$1, mapProps(mapDatePicker()), mapReadPretty(ReadPretty$d.DatePicker)), InternalRangePicker = connect(
14315
14324
  DatePicker$1.RangePicker,
14316
14325
  mapProps(mapRangePicker()),
14317
14326
  mapReadPretty(ReadPretty$d.DateRangePicker)
@@ -14363,35 +14372,42 @@ const DatePickerContext = React.createContext({ utc: !0 }), useDatePickerContext
14363
14372
  };
14364
14373
  DatePicker.ReadPretty = ReadPretty$d.DatePicker;
14365
14374
  DatePicker.RangePicker = function(t) {
14366
- const { value: o, picker: n = "date", format: r, showTime: i, timeFormat: a } = t, { t: l } = useTranslation(), c = useFieldSchema(), u = useField(), { utc: d = !0 } = useDatePickerContext(), p = getDateRanges(), m = useCompile(), h = !(c != null && c["x-filter-operator"]), g = [
14367
- { label: l("Today"), value: p.today },
14368
- { label: l("Last week"), value: p.lastWeek },
14369
- { label: l("This week"), value: p.thisWeek },
14370
- { label: l("Next week"), value: p.nextWeek },
14371
- { label: l("Last month"), value: p.lastMonth },
14372
- { label: l("This month"), value: p.thisMonth },
14373
- { label: l("Next month"), value: p.nextMonth },
14374
- { label: l("Last quarter"), value: p.lastQuarter },
14375
- { label: l("This quarter"), value: p.thisQuarter },
14376
- { label: l("Next quarter"), value: p.nextQuarter },
14377
- { label: l("Last year"), value: p.lastYear },
14378
- { label: l("This year"), value: p.thisYear },
14379
- { label: l("Next year"), value: p.nextYear },
14380
- { label: l("Last 7 days"), value: p.last7Days },
14381
- { label: l("Next 7 days"), value: p.next7Days },
14382
- { label: l("Last 30 days"), value: p.last30Days },
14383
- { label: l("Next 30 days"), value: p.next30Days },
14384
- { label: l("Last 90 days"), value: p.last90Days },
14385
- { label: l("Next 90 days"), value: p.next90Days }
14386
- ], f = o ? inferPickerType(o == null ? void 0 : o[0], n) : n, y = getPickerFormat(f) || r, b = A(x({
14387
- utc: d,
14388
- presets: g
14375
+ const { value: o, picker: n = "date", format: r, dateFormat: i, showTime: a, timeFormat: l } = t, { t: c } = useTranslation(), u = useFieldSchema(), d = useField(), { utc: p = !0 } = useDatePickerContext(), m = getDateRanges(), h = useCompile(), g = !(u != null && u["x-filter-operator"]), f = [
14376
+ { label: c("Today"), value: m.today },
14377
+ { label: c("Last week"), value: m.lastWeek },
14378
+ { label: c("This week"), value: m.thisWeek },
14379
+ { label: c("Next week"), value: m.nextWeek },
14380
+ { label: c("Last month"), value: m.lastMonth },
14381
+ { label: c("This month"), value: m.thisMonth },
14382
+ { label: c("Next month"), value: m.nextMonth },
14383
+ { label: c("Last quarter"), value: m.lastQuarter },
14384
+ { label: c("This quarter"), value: m.thisQuarter },
14385
+ { label: c("Next quarter"), value: m.nextQuarter },
14386
+ { label: c("Last year"), value: m.lastYear },
14387
+ { label: c("This year"), value: m.thisYear },
14388
+ { label: c("Next year"), value: m.nextYear },
14389
+ { label: c("Last 7 days"), value: m.last7Days },
14390
+ { label: c("Next 7 days"), value: m.next7Days },
14391
+ { label: c("Last 30 days"), value: m.last30Days },
14392
+ { label: c("Next 30 days"), value: m.next30Days },
14393
+ { label: c("Last 90 days"), value: m.last90Days },
14394
+ { label: c("Next 90 days"), value: m.next90Days }
14395
+ ], y = o ? inferPickerType(o == null ? void 0 : o[0], n) : n, b = A(x({
14396
+ utc: p,
14397
+ presets: f
14389
14398
  }, t), {
14390
- format: getDateTimeFormat(f, y, i, a),
14391
- picker: f,
14392
- showTime: i ? { defaultValue: [dayjs("00:00:00", "HH:mm:ss"), dayjs("23:59:59", "HH:mm:ss")] } : !1
14393
- }), [S, C] = useState(b);
14394
- return h ? /* @__PURE__ */ jsxs(Space$1.Compact, { children: [
14399
+ format: resolveFilterPickerFormat({
14400
+ targetPicker: y,
14401
+ picker: n,
14402
+ format: r,
14403
+ dateFormat: i,
14404
+ showTime: a,
14405
+ timeFormat: l
14406
+ }),
14407
+ picker: y,
14408
+ showTime: a ? { defaultValue: [dayjs("00:00:00", "HH:mm:ss"), dayjs("23:59:59", "HH:mm:ss")] } : !1
14409
+ });
14410
+ return g ? /* @__PURE__ */ jsxs(Space$1.Compact, { children: [
14395
14411
  /* @__PURE__ */ jsx(
14396
14412
  Select$1,
14397
14413
  {
@@ -14399,58 +14415,71 @@ DatePicker.RangePicker = function(t) {
14399
14415
  "data-testid": "select-picker",
14400
14416
  style: { width: "100px" },
14401
14417
  popupMatchSelectWidth: !1,
14402
- defaultValue: f,
14403
- options: m([
14418
+ defaultValue: y,
14419
+ options: h([
14404
14420
  {
14405
- label: l("Date"),
14421
+ label: c("Date"),
14406
14422
  value: "date"
14407
14423
  },
14408
14424
  {
14409
- label: l("Month"),
14425
+ label: c("Month"),
14410
14426
  value: "month"
14411
14427
  },
14412
14428
  {
14413
- label: l("Quarter"),
14429
+ label: c("Quarter"),
14414
14430
  value: "quarter"
14415
14431
  },
14416
14432
  {
14417
- label: l("Year"),
14433
+ label: c("Year"),
14418
14434
  value: "year"
14419
14435
  }
14420
14436
  ]),
14421
- onChange: (F) => {
14422
- const P = getPickerFormat(F), v = getDateTimeFormat(F, P, i, a);
14423
- u == null || u.setComponentProps({
14424
- picker: F,
14425
- format: P
14426
- }), b.picker = F, b.format = v, C(b), c && (c["x-component-props"] = A(x({}, t), {
14427
- picker: F,
14428
- format: v
14429
- })), u && (u.value = void 0);
14437
+ onChange: (S) => {
14438
+ const C = getPickerFormat(S), F = getDateTimeFormat(S, C, a, l);
14439
+ d == null || d.setComponentProps({
14440
+ picker: S,
14441
+ dateFormat: C,
14442
+ format: F
14443
+ }), u && (u["x-component-props"] = A(x({}, t), {
14444
+ picker: S,
14445
+ dateFormat: C,
14446
+ format: F
14447
+ })), d && (d.value = void 0);
14430
14448
  }
14431
14449
  }
14432
14450
  ),
14433
- /* @__PURE__ */ jsx(InternalRangePicker, A(x({}, S), { value: o }))
14451
+ /* @__PURE__ */ jsx(InternalRangePicker, A(x({}, b), { value: o }))
14434
14452
  ] }) : /* @__PURE__ */ jsx(InternalRangePicker, x({}, b));
14435
14453
  };
14436
14454
  function toLocalNaiveISOString(e, t) {
14437
14455
  return e && e.endsWith("Z") ? dayjs(e).format(t) : e;
14438
14456
  }
14439
14457
  DatePicker.FilterWithPicker = function(t) {
14440
- const { picker: o = "date", format: n, showTime: r, timeFormat: i } = t, a = isMobile(), { utc: l = !0 } = useDatePickerContext(), c = Array.isArray(t.value) ? t.value[0] : t.value, u = useFieldSchema(), d = c ? inferPickerType(c, o) : o, [p, m] = useState(d), h = getPickerFormat(d) || n, { t: g } = useTranslation(), f = A(x({
14441
- utc: l,
14442
- inputReadOnly: a
14458
+ const { picker: o = "date", format: n, dateFormat: r, showTime: i, timeFormat: a } = t, l = isMobile(), { utc: c = !0 } = useDatePickerContext(), u = Array.isArray(t.value) ? t.value[0] : t.value, d = useFieldSchema(), p = u ? inferPickerType(u, o) : o, [m, h] = useState(p), { t: g } = useTranslation();
14459
+ useEffect(() => {
14460
+ h(p);
14461
+ }, [p]);
14462
+ const f = A(x({
14463
+ utc: c,
14464
+ inputReadOnly: l
14443
14465
  }, t), {
14444
14466
  underFilter: !0,
14445
- showTime: r ? { defaultValue: dayjs("00:00:00", "HH:mm:ss") } : !1,
14446
- format: getDateTimeFormat(p, h, r, i),
14447
- picker: p,
14448
- onChange: (C) => {
14467
+ showTime: i ? { defaultValue: dayjs("00:00:00", "HH:mm:ss") } : !1,
14468
+ format: resolveFilterPickerFormat({
14469
+ targetPicker: m,
14470
+ picker: o,
14471
+ format: n,
14472
+ dateFormat: r,
14473
+ showTime: i,
14474
+ timeFormat: a
14475
+ }),
14476
+ picker: m,
14477
+ onChange: (b) => {
14449
14478
  t.onChange(void 0), setTimeout(() => {
14450
- t.onChange(C);
14479
+ t.onChange(b);
14451
14480
  });
14452
14481
  }
14453
- }), y = useField(), [b, S] = useState(f);
14482
+ }), y = useField();
14454
14483
  return /* @__PURE__ */ jsxs(Space$1.Compact, { style: { width: "100%" }, children: [
14455
14484
  /* @__PURE__ */ jsx(
14456
14485
  Select$1,
@@ -14459,7 +14488,7 @@ DatePicker.FilterWithPicker = function(t) {
14459
14488
  "data-testid": "select-picker",
14460
14489
  style: { width: "100px" },
14461
14490
  popupMatchSelectWidth: !1,
14462
- value: p,
14491
+ value: m,
14463
14492
  options: [
14464
14493
  {
14465
14494
  label: g("Date"),
@@ -14478,25 +14507,22 @@ DatePicker.FilterWithPicker = function(t) {
14478
14507
  value: "year"
14479
14508
  }
14480
14509
  ],
14481
- onChange: (C) => {
14482
- m(C);
14483
- const F = getPickerFormat(C), P = getDateTimeFormat(C, F, r, i);
14510
+ onChange: (b) => {
14511
+ h(b);
14512
+ const S = getPickerFormat(b), C = getDateTimeFormat(b, S, i, a);
14484
14513
  y == null || y.setComponentProps({
14485
- picker: C,
14486
- format: F
14487
- }), f.picker = C, f.format = P, S(f), u != null && u["x-component-props"] && (u["x-component-props"] = A(x({}, t), {
14488
- picker: C,
14489
- format: P
14514
+ picker: b,
14515
+ dateFormat: S,
14516
+ format: C
14517
+ }), d != null && d["x-component-props"] && (d["x-component-props"] = A(x({}, t), {
14518
+ picker: b,
14519
+ dateFormat: S,
14520
+ format: C
14490
14521
  })), y && (y.value = null);
14491
14522
  }
14492
14523
  }
14493
14524
  ),
14494
- /* @__PURE__ */ jsx(
14495
- InternalDatePicker,
14496
- A(x({}, b), {
14497
- value: toLocalNaiveISOString(c, getDateTimeFormat(p, h, r, i))
14498
- })
14499
- )
14525
+ /* @__PURE__ */ jsx(InternalDatePicker, A(x({}, f), { value: toLocalNaiveISOString(u, f.format) }))
14500
14526
  ] });
14501
14527
  };
14502
14528
  const useDateVariable = ({ operator: e, schema: t, noDisabled: o }) => {
@@ -32252,7 +32278,10 @@ function SchemaSettingsConnectDataBlocks(e) {
32252
32278
  title: f,
32253
32279
  value: (S == null ? void 0 : S.field) || "",
32254
32280
  options: [
32255
- ...getSupportFieldsByAssociation(m(a.name), g).map((C) => ({
32281
+ ...getSupportFieldsByAssociation(
32282
+ m(a.name, a.dataSource),
32283
+ g
32284
+ ).map((C) => ({
32256
32285
  label: p(C.uiSchema.title) || C.name,
32257
32286
  value: `${C.name}.${getTargetKey(C)}`
32258
32287
  })),
@@ -72521,8 +72550,9 @@ class BlockModel extends FlowModel {
72521
72550
  * @returns 'auto' | 'manual'
72522
72551
  */
72523
72552
  getDataLoadingMode() {
72524
- var o;
72525
- return ((o = this.getStepParams("dataLoadingModeSettings")) == null ? void 0 : o.mode) || "auto";
72553
+ var n;
72554
+ const o = this.getStepParams("dataLoadingModeSettings");
72555
+ return ((n = o == null ? void 0 : o.dataLoadingMode) == null ? void 0 : n.mode) || "auto";
72526
72556
  }
72527
72557
  static _getScene() {
72528
72558
  return _.castArray(this.scene || []);
@@ -91957,9 +91987,13 @@ const HighPerformanceTable = React.memo(
91957
91987
  .ant-table-tbody > tr > td.ant-table-selection-column {
91958
91988
  padding-left: 32px !important;
91959
91989
  }
91960
- ` : void 0;
91961
- return classNames(M, T);
91962
- }, [t.props.dragSort, t.props.dragSortBy]);
91990
+ ` : void 0, w = d != null && d.y ? css`
91991
+ .ant-table-body {
91992
+ min-height: ${d.y}px;
91993
+ }
91994
+ ` : void 0;
91995
+ return classNames(M, T, w);
91996
+ }, [t.props.dragSort, t.props.dragSortBy, d == null ? void 0 : d.y]);
91963
91997
  return /* @__PURE__ */ jsx(
91964
91998
  MemoizedTable,
91965
91999
  {
@@ -96861,7 +96895,7 @@ const titleField = defineAction({
96861
96895
  if (!o)
96862
96896
  return;
96863
96897
  const n = o.resource;
96864
- n instanceof MultiRecordResource && (o.setStepParams("dataLoadingModeSettings", { mode: t.mode }), t.mode === "manual" && !o.hasActiveFilters() ? (n.setData([]), n.setMeta({ count: 0, hasNext: !1 }), typeof n.setPage == "function" && n.setPage(1), n.loading = !1) : t.mode === "auto" && n.refresh());
96898
+ n instanceof MultiRecordResource && (t.mode === "manual" && !o.hasActiveFilters() ? (n.setData([]), n.setMeta({ count: 0, hasNext: !1 }), typeof n.setPage == "function" && n.setPage(1), n.loading = !1) : t.mode === "auto" && n.refresh());
96865
96899
  }
96866
96900
  }), renderMode = defineAction({
96867
96901
  title: tExpr("Render mode"),
@@ -108478,6 +108512,7 @@ export {
108478
108512
  required,
108479
108513
  resolveCustomFieldOperatorList,
108480
108514
  resolveDefaultCustomFieldOperator,
108515
+ resolveFilterPickerFormat,
108481
108516
  reverseFieldProperties,
108482
108517
  runjs,
108483
108518
  schemaSettingsLabelLayout,
@@ -10,6 +10,32 @@ import React from 'react';
10
10
  interface IDatePickerProps {
11
11
  utc?: boolean;
12
12
  }
13
+ /**
14
+ * 解析筛选日期组件的展示格式。
15
+ *
16
+ * 这里优先使用 schema 上显式配置的 dateFormat / format,
17
+ * 只有在当前 picker 没有自定义格式时才回退到默认 picker 格式。
18
+ *
19
+ * @param options 当前筛选日期组件的格式参数
20
+ * @returns 适用于当前 picker 的最终展示格式
21
+ * @example
22
+ * ```typescript
23
+ * resolveFilterPickerFormat({
24
+ * targetPicker: 'date',
25
+ * picker: 'date',
26
+ * dateFormat: 'MM/DD/YY',
27
+ * showTime: false,
28
+ * });
29
+ * ```
30
+ */
31
+ export declare const resolveFilterPickerFormat: (options: {
32
+ targetPicker: string;
33
+ picker?: string;
34
+ format?: string;
35
+ dateFormat?: string;
36
+ showTime?: boolean;
37
+ timeFormat?: string;
38
+ }) => any;
13
39
  export declare const useDatePickerContext: () => IDatePickerProps;
14
40
  export declare const DatePickerProvider: React.Provider<IDatePickerProps>;
15
41
  export declare const DatePicker: {