@steedos-widgets/amis-lib 6.3.12-beta.8 → 6.3.12

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/index.esm.js CHANGED
@@ -505,8 +505,8 @@ function getComparableAmisVersion() {
505
505
  /*
506
506
  * @Author: baozhoutao@steedos.com
507
507
  * @Date: 2022-05-23 09:53:08
508
- * @LastEditors: baozhoutao@steedos.com
509
- * @LastEditTime: 2024-11-17 13:10:08
508
+ * @LastEditors: 殷亮辉 yinlianghui@hotoa.com
509
+ * @LastEditTime: 2025-04-08 10:55:41
510
510
  * @Description:
511
511
  */
512
512
 
@@ -663,9 +663,10 @@ function getRelatedFieldTpl(field, ctx){
663
663
  const href = Router.getObjectDetailPath({
664
664
  formFactor: ctx.formFactor, appId: "${appId}", objectName: `${objectNameTpl}`, recordId: `${recordIdTpl}`
665
665
  });
666
- if(ctx.isRelated && window.innerWidth >= 768){
666
+ if (window.innerWidth >= 768) { //(ctx.isRelated || isObjectListview) && window.innerWidth >= 768
667
+ // 相关表字段,包括列表视图、对象表格组件中的lookup/master_detail字段,在PC端显示时,点击字段值,不跳转到详情页而是右侧弹出drawer
667
668
  labelTpl = `<a href="${href}" ${linkTarget} onclick="return false;">${labelTpl}</a>`;
668
- }else {
669
+ } else {
669
670
  labelTpl = `<a href="${href}" ${linkTarget}>${labelTpl}</a>`;
670
671
  }
671
672
 
@@ -1213,7 +1214,7 @@ async function getPage({type, pageId = '', appId, objectName = '', recordId = ''
1213
1214
  * @Author: baozhoutao@steedos.com
1214
1215
  * @Date: 2022-10-28 14:15:09
1215
1216
  * @LastEditors: baozhoutao@steedos.com
1216
- * @LastEditTime: 2024-11-14 10:50:01
1217
+ * @LastEditTime: 2025-02-13 09:31:02
1217
1218
  * @Description:
1218
1219
  */
1219
1220
 
@@ -1272,7 +1273,7 @@ async function getLookupLinkOnClick(field, options) {
1272
1273
  "title": "&nbsp;",
1273
1274
  "headerClassName": "hidden",
1274
1275
  "size": "lg",
1275
- "width": "70%",
1276
+ "width": window.drawerWidth || "70%",
1276
1277
  "bodyClassName": "p-0 m-0 bg-gray-100",
1277
1278
  "closeOnEsc": true,
1278
1279
  "closeOnOutside": true,
@@ -1868,7 +1869,6 @@ async function getQuickEditSchema(object, columnField, options){
1868
1869
  {
1869
1870
  actionType: "custom",
1870
1871
  script: `
1871
- console.log("asdasd");
1872
1872
  let items = _.cloneDeep(event.data.items);
1873
1873
  let selectedItems = _.cloneDeep(event.data.selectedItems);
1874
1874
  if(event.data.isBatchEdit){
@@ -1897,7 +1897,12 @@ async function getQuickEditSchema(object, columnField, options){
1897
1897
  if (field.disabled) {
1898
1898
  quickEditSchema = false;
1899
1899
  } else {
1900
- var fieldSchema = await convertSFieldToAmisField(field, false, _$1.omit(options, 'buttons'));
1900
+ var fieldCtx = Object.assign({}, _$1.omit(options, 'buttons'), {
1901
+ defaults: Object.assign({}, options.defaults, {
1902
+ formSchema: quickEditSchema
1903
+ })
1904
+ });
1905
+ var fieldSchema = await convertSFieldToAmisField(field, false, fieldCtx);
1901
1906
  //存在属性上可编辑,实际不可编辑的字段,convertSFieldToAmisField函数可能会返回undefined,如summary
1902
1907
  if (!!fieldSchema) {
1903
1908
  quickEditSchema.body.push(fieldSchema);
@@ -2330,14 +2335,19 @@ function getFieldWidth(width){
2330
2335
  }
2331
2336
 
2332
2337
  async function getColumnItemOnClick(field, options){
2333
- const recordPage = await getPage({ type: 'record', appId: options.appId, objectName: options.objectName, formFactor: options.formFactor });
2338
+ let objectApiName = options.objectName;
2339
+ if(!(field.is_name || field.name === options.labelFieldName)){
2340
+ objectApiName = field.reference_to;
2341
+ }
2342
+ const recordPage = await getPage({ type: 'record', appId: options.appId, objectName: objectApiName, formFactor: options.formFactor });
2334
2343
  const drawerRecordDetailSchema = recordPage ? Object.assign({}, recordPage.schema, {
2335
2344
  "recordId": `\${${options.idFieldName}}`,
2336
2345
  "data": {
2337
2346
  ...recordPage.schema.data,
2338
2347
  "_inDrawer": true, // 用于判断是否在抽屉中
2339
2348
  "recordLoaded": false, // 重置数据加载状态
2340
- "recordId": `\${${options.idFieldName}}`//审批微页面依赖了作用域中的recordId
2349
+ "recordId": `\${${options.idFieldName}}`,//审批微页面依赖了作用域中的recordId
2350
+ "_tableObjectName": options.objectName
2341
2351
  }
2342
2352
  }) : {
2343
2353
  "type": "steedos-record-detail",
@@ -2348,12 +2358,16 @@ async function getColumnItemOnClick(field, options){
2348
2358
  "data": {
2349
2359
  "_inDrawer": true, // 用于判断是否在抽屉中
2350
2360
  "recordLoaded": false, // 重置数据加载状态
2361
+ "_tableObjectName": options.objectName
2351
2362
  }
2352
2363
  };
2353
2364
 
2354
2365
  if(!(field.is_name || field.name === options.labelFieldName)){
2355
2366
  drawerRecordDetailSchema.objectApiName = field.reference_to;
2356
2367
  drawerRecordDetailSchema.recordId = `\${_display.${field.name}.value}`;
2368
+ // if (recordPage){
2369
+ // drawerRecordDetailSchema.data.recordId = `\${_display.${field.name}.value}`
2370
+ // }
2357
2371
  }
2358
2372
  return {
2359
2373
  "click": {
@@ -2365,7 +2379,7 @@ async function getColumnItemOnClick(field, options){
2365
2379
  "title": "&nbsp;",
2366
2380
  "headerClassName": "hidden",
2367
2381
  "size": "lg",
2368
- "width": "70%",
2382
+ "width": window.drawerWidth || "70%",
2369
2383
  "bodyClassName": "p-0 m-0 bg-gray-100",
2370
2384
  "closeOnEsc": true,
2371
2385
  "closeOnOutside": true,
@@ -2503,6 +2517,32 @@ async function getTableColumns(object, fields, options){
2503
2517
  static: true,
2504
2518
  }, fieldAmis, {name: field.name});
2505
2519
  }
2520
+ else if(field.type === 'lookup' || field.type === 'master_detail'){
2521
+ columnItem = Object.assign({}, {
2522
+ type: "static-wrapper",
2523
+ name: field.name,
2524
+ label: field.label,
2525
+ sortable: field.sortable,
2526
+ width: getFieldWidth(field.width),
2527
+ toggled: field.toggled,
2528
+ className,
2529
+ size: "none",
2530
+ inputClassName: "inline",
2531
+ body: {
2532
+ type: "steedos-field",
2533
+ static: true,
2534
+ tableObjectName: options.objectName,
2535
+ config: {
2536
+ type: "lookup",
2537
+ reference_to: field.reference_to,
2538
+ name: field.name,
2539
+ label: null,
2540
+ multiple: field.multiple,
2541
+ amis: Object.assign({}, fieldAmis, { label: null })
2542
+ }
2543
+ }
2544
+ }, fieldAmis, {name: field.name});
2545
+ }
2506
2546
  else {
2507
2547
  const tpl = await getFieldTpl(field, options);
2508
2548
  let type = 'static-text';
@@ -2551,10 +2591,20 @@ async function getTableColumns(object, fields, options){
2551
2591
  columnItem.defaultColor = null;
2552
2592
  }
2553
2593
 
2554
- if(window.innerWidth >= 768 && ((field.is_name || field.name === options.labelFieldName) || ((field.type == 'lookup' || field.type == 'master_detail') && _$1.isString(field.reference_to) && field.multiple != true)) && options.isRelated){
2594
+ let needClickEvent = false;
2595
+ // if (options.isRelated){
2596
+ // // 子表列表上,Lookup字段和名称字段都需要点击事件
2597
+ // needClickEvent = ((field.is_name || field.name === options.labelFieldName) || ((field.type == 'lookup' || field.type == 'master_detail') && _.isString(field.reference_to) && field.multiple != true));
2598
+ // }
2599
+ // else {// if (isObjectListview)
2600
+ // // 列表视图、对象表格中,Lookup字段需要点击事件
2601
+ // needClickEvent = (field.type == 'lookup' || field.type == 'master_detail') && _.isString(field.reference_to) && field.multiple != true;
2602
+ // }
2603
+ // lookup字段走steedos-field组件了,所以这里只需要判断子表名称字段才额外加点击事件弹出右侧详情
2604
+ needClickEvent = options.isRelated && (field.is_name || field.name === options.labelFieldName);
2605
+ if(window.innerWidth >= 768 && needClickEvent){
2555
2606
  columnItem.onEvent = await getColumnItemOnClick(field, options);
2556
2607
  }
2557
-
2558
2608
  }
2559
2609
  }
2560
2610
  if(columnItem){
@@ -3409,6 +3459,11 @@ async function getTableApi(mainObject, fields, options){
3409
3459
  }, 600);
3410
3460
  }
3411
3461
  }
3462
+
3463
+ // 列表搜索和快速搜索,有时在某些操作情况下还是会造成crud接口请求使用的过滤条件是上次的,这里强制把正确的过滤条件返回到crud,详细规则见:https://github.com/steedos/steedos-platform/issues/7112
3464
+ // lookup字段的弹出列表搜索不受这里影响,因为lookup字段的弹出列表搜索是单独的接口请求
3465
+ payload.data.__changedFilterFormValues = api.context.__changedFilterFormValues;
3466
+ payload.data.__changedSearchBoxValues = api.context.__changedSearchBoxValues;
3412
3467
  ${options.adaptor || ''}
3413
3468
  return payload;
3414
3469
  `;
@@ -5096,8 +5151,8 @@ const getSchema$4 = async (uiSchema, ctx) => {
5096
5151
  /*
5097
5152
  * @Author: 殷亮辉 yinlianghui@hotoa.com
5098
5153
  * @Date: 2023-03-22 09:31:21
5099
- * @LastEditors: baozhoutao@steedos.com
5100
- * @LastEditTime: 2024-02-18 16:06:21
5154
+ * @LastEditors: 殷亮辉 yinlianghui@hotoa.com
5155
+ * @LastEditTime: 2025-04-07 16:02:53
5101
5156
  */
5102
5157
  const getSchema$3 = (uiSchema)=>{
5103
5158
  return {
@@ -5157,6 +5212,17 @@ const getSchema$3 = (uiSchema)=>{
5157
5212
  "_isRelated": "${_isRelated}"
5158
5213
  },
5159
5214
  "expression": `\${_master.objectName != '${uiSchema.name}' && _master.objectName}`
5215
+ },
5216
+ // 列表视图、对象表格组件上的lookup字段,点开右侧弹出drawer窗口,删除记录后刷新列表
5217
+ {
5218
+ "actionType": "broadcast",
5219
+ "args": {
5220
+ "eventName": "@data.changed.${_tableObjectName}"
5221
+ },
5222
+ "data": {
5223
+ "objectName": "${_tableObjectName}"
5224
+ },
5225
+ "expression": `\${_tableObjectName != '${uiSchema.name}' && _tableObjectName}`
5160
5226
  }
5161
5227
  ]
5162
5228
  }
@@ -6140,15 +6206,38 @@ async function getObjectFieldsFilterBarSchema(objectSchema, ctx) {
6140
6206
  if (!ctx) {
6141
6207
  ctx = {};
6142
6208
  }
6209
+ const searchableFields = ctx.searchable_fields;
6210
+ const autoOpenFilter = !!ctx.auto_open_filter;
6143
6211
  const btnSearchId = "btn_filter_form_search_" + new Date().getTime();
6144
6212
  const filterFormSchema = await getObjectFieldsFilterFormSchema(ctx);
6145
6213
  const keywordsSearchBoxName = ctx.keywordsSearchBoxName || "__keywords";
6146
6214
  const onSearchScript = `
6147
- // console.log("===onSearchScript=form==");
6215
+ let isLookup = event.data.isLookup;
6216
+ let __lookupField = event.data.__lookupField;
6148
6217
  const scope = event.context.scoped;
6218
+ let crud = SteedosUI.getClosestAmisComponentByType(scope, "crud");
6149
6219
  var filterForm = scope.parent.parent.getComponents().find(function(n){
6150
6220
  return n.props.type === "form";
6151
6221
  });
6222
+ // 使用filterForm.getValues()的话,并不能拿到本地存储中的过滤条件,所以需要从event.data中取,因为本地存储中的过滤条件自动填充到表单上时filterForm.getValues()拿不到。
6223
+ let filterFormValues = event.data;
6224
+ filterFormValues = JSON.parse(JSON.stringify(filterFormValues)); //只取当层数据域中数据,去除__super层数据
6225
+ const changedFilterFormValues = _.pickBy(filterFormValues, function(n,k){return /^__searchable__/.test(k);});
6226
+ // 同步__changedFilterFormValues中的值
6227
+ // crud && crud.setData({__changedFilterFormValues: {}});
6228
+ let __changedFilterFormValuesKey = "__changedFilterFormValues";
6229
+ if(isLookup && __lookupField){
6230
+ let lookupTag = "__lookup__" + __lookupField.name + "__" + __lookupField.reference_to;
6231
+ if(__lookupField.reference_to_field){
6232
+ lookupTag += "__" + __lookupField.reference_to_field;
6233
+ }
6234
+ __changedFilterFormValuesKey += lookupTag;
6235
+ }
6236
+ if(crud){
6237
+ let crudData = crud.getData();
6238
+ crudData[__changedFilterFormValuesKey] = changedFilterFormValues;
6239
+ crud.setData(crudData);
6240
+ }
6152
6241
  filterForm.handleFormSubmit(event);
6153
6242
  // var filterFormValues = filterForm.getValues();
6154
6243
  // var listView = scope.parent.parent.parent.getComponents().find(function(n){
@@ -6197,11 +6286,8 @@ async function getObjectFieldsFilterBarSchema(objectSchema, ctx) {
6197
6286
  }
6198
6287
  filterService.setData({showFieldsFilter});
6199
6288
  // resizeWindow();//已迁移到搜索栏表单提交事件中执行,因为表单项change后也会触发表单提交了
6200
- // 使用filterForm.getValues()的话,并不能拿到本地存储中的过滤条件,所以需要从event.data中取。
6201
- let filterFormValues = event.data;
6202
6289
  let isFieldsFilterEmpty = SteedosUI.isFilterFormValuesEmpty(filterFormValues);
6203
- let crud = SteedosUI.getClosestAmisComponentByType(scope, "crud");
6204
- let crudService = crud && SteedosUI.getClosestAmisComponentByType(crud.context, "service");
6290
+ let crudService = crud && SteedosUI.getClosestAmisComponentByType(crud.context, "service", {name: "service_object_table_crud"});
6205
6291
  crudService && crudService.setData({isFieldsFilterEmpty, showFieldsFilter});
6206
6292
  `;
6207
6293
  const onCancelScript = `
@@ -6287,10 +6373,27 @@ async function getObjectFieldsFilterBarSchema(objectSchema, ctx) {
6287
6373
 
6288
6374
  // 移除搜索按钮上的红点
6289
6375
  // let crudService = scope.getComponentById("service_listview_" + event.data.objectName);
6290
- let crudService = crud && SteedosUI.getClosestAmisComponentByType(crud.context, "service");
6376
+ let crudService = crud && SteedosUI.getClosestAmisComponentByType(crud.context, "service", {name: "service_object_table_crud"});
6291
6377
  crudService && crudService.setData({isFieldsFilterEmpty: true, showFieldsFilter: false});
6292
6378
  `;
6379
+ /**
6380
+ 给lookup字段配置filter_form_data时可以配置为amis变量,也可以配置为事态key-value键值对象值:
6381
+ ```
6382
+ "filter_form_data": "${selectedPublicGroupFilterFormData|toJson}"
6383
+ ```
6384
+ or
6385
+ ```
6386
+ "filter_form_data": {
6387
+ "public_group_ids": [
6388
+ "67addbef39f9a4503789b38d"
6389
+ ]
6390
+ }
6391
+ ```
6392
+ */
6393
+ const filterFormValues = ctx.filter_form_data;
6293
6394
  const dataProviderInited = `
6395
+ const searchableFields = ${JSON.stringify(searchableFields)};
6396
+ const autoOpenFilter = ${autoOpenFilter};
6294
6397
  const objectName = data.objectName;
6295
6398
  const isLookup = data.isLookup;
6296
6399
  const listName = data.listName;
@@ -6303,6 +6406,11 @@ async function getObjectFieldsFilterBarSchema(objectSchema, ctx) {
6303
6406
  if(defaultSearchableFields){
6304
6407
  defaultSearchableFields = defaultSearchableFields.split(",");
6305
6408
  }
6409
+ if(_.isEmpty(defaultSearchableFields) && searchableFields){
6410
+ if(searchableFields.length){
6411
+ defaultSearchableFields = _.map(searchableFields, 'field');
6412
+ }
6413
+ }
6306
6414
  if(_.isEmpty(defaultSearchableFields) && data.uiSchema){
6307
6415
  let listView = data.uiSchema.list_views[data.listName];
6308
6416
  const sFields = listView && listView.searchable_fields;
@@ -6320,8 +6428,18 @@ async function getObjectFieldsFilterBarSchema(objectSchema, ctx) {
6320
6428
  }
6321
6429
  setData({ filterFormSearchableFields: defaultSearchableFields });
6322
6430
  if(isLookup){
6431
+ let filterFormValues = ${_.isObject(filterFormValues) ? JSON.stringify(filterFormValues) : ('"' + filterFormValues + '"')} || {};
6432
+ const isAmisFormula = typeof filterFormValues === "string" && filterFormValues.indexOf("\${") > -1;
6433
+ if (isAmisFormula){
6434
+ filterFormValues = AmisCore.evaluate(filterFormValues, data) || {};
6435
+ }
6436
+ if (_.isObject(filterFormValues) || !_.isEmpty(filterFormValues)){
6437
+ let fields = data.uiSchema && data.uiSchema.fields;
6438
+ filterFormValues = SteedosUI.getSearchFilterFormValues(filterFormValues, fields);
6439
+ setData({ ...filterFormValues });
6440
+ }
6323
6441
  // looup字段过滤器不在本地缓存记住过滤条件,所以初始始终隐藏过滤器
6324
- setData({ showFieldsFilter: false });
6442
+ setData({ showFieldsFilter: autoOpenFilter });
6325
6443
  }
6326
6444
  else{
6327
6445
  const listViewPropsStoreKey = location.pathname + "/crud";
@@ -6611,13 +6729,15 @@ async function getObjectFieldsFilterBarSchema(objectSchema, ctx) {
6611
6729
  "actionType": "custom",
6612
6730
  "script": onSearchableFieldsChangeScript
6613
6731
  },
6614
- {
6615
- "actionType": "click",
6616
- "componentId": btnSearchId,
6617
- "args": {
6618
- "__from_fields_filter_settings_confirm": true
6619
- }
6620
- },
6732
+ // 自动触发搜索事件会造成bug,应该是升级amis到6.4造成的,见:https://github.com/steedos/steedos-platform/issues/7121
6733
+ // 变更搜索项后,用户一般会点击搜索按钮,所以这里不自动触发搜索事件
6734
+ // {
6735
+ // "actionType": "click",
6736
+ // "componentId": btnSearchId,
6737
+ // "args": {
6738
+ // "__from_fields_filter_settings_confirm": true
6739
+ // }
6740
+ // },
6621
6741
  {
6622
6742
  "componentId": "",
6623
6743
  "args": {},
@@ -7586,7 +7706,7 @@ async function getObjectListHeaderFieldsFilterBar(objectSchema, listViewName, ct
7586
7706
  * @param {*} objectSchema 对象UISchema
7587
7707
  * @returns amisSchema
7588
7708
  */
7589
- function getObjectListHeader$1(objectSchema, listViewName, ctx) {
7709
+ function getObjectListHeader(objectSchema, listViewName, ctx) {
7590
7710
  if (!ctx) {
7591
7711
  ctx = {};
7592
7712
  }
@@ -8912,10 +9032,9 @@ function getObjectHeaderQuickSearchBox(mainObject, fields, formFactor, { isLooku
8912
9032
  }
8913
9033
 
8914
9034
  const onChangeScript = `
8915
- // console.log("==search=onChangeScript===");
8916
9035
  const scope = event.context.scoped;
8917
9036
  let crud = SteedosUI.getClosestAmisComponentByType(scope, "crud");
8918
- // let crudService = crud && SteedosUI.getClosestAmisComponentByType(crud.context, "service");
9037
+ // let crudService = crud && SteedosUI.getClosestAmisComponentByType(crud.context, "service", {name: "service_object_table_crud"});
8919
9038
  let __changedSearchBoxValues = {};
8920
9039
  __changedSearchBoxValues["${keywordsSearchBoxName}"] = event.data["${keywordsSearchBoxName}"];
8921
9040
  // crudService && crudService.setData({__changedSearchBoxValues: __changedSearchBoxValues});
@@ -9282,10 +9401,28 @@ async function getObjectFilter(objectSchema, fields, options) {
9282
9401
  let filterForm = SteedosUI.getClosestAmisComponentByType(scope, "form");
9283
9402
  let filterFormService = SteedosUI.getClosestAmisComponentByType(filterForm.context, "service");
9284
9403
  // 使用event.data的话,并不能拿到本地存储中的过滤条件,所以需要从filterFormService中取。
9285
- let filterFormValues = filterFormService.getData()
9404
+ let filterFormValues = filterFormService.getData();
9405
+ filterFormValues = JSON.parse(JSON.stringify(filterFormValues)); //只取当层数据域中数据,去除__super层数据
9286
9406
  let isFieldsFilterEmpty = SteedosUI.isFilterFormValuesEmpty(filterFormValues);
9287
9407
  let crud = SteedosUI.getClosestAmisComponentByType(scope, "crud");
9288
- let crudService = crud && SteedosUI.getClosestAmisComponentByType(crud.context, "service");
9408
+ const changedFilterFormValues = _.pickBy(filterFormValues, function(n,k){return /^__searchable__/.test(k);});
9409
+ // 这里不用crudService而用crud是因为lookup字段弹出的列表中的crudService中的变量无法传入crud的发送适配器中
9410
+ // crud && crud.setData({__changedFilterFormValues: changedFilterFormValues});
9411
+ let __changedFilterFormValuesKey = "__changedFilterFormValues";
9412
+ if(isLookup && __lookupField){
9413
+ let lookupTag = "__lookup__" + __lookupField.name + "__" + __lookupField.reference_to;
9414
+ if(__lookupField.reference_to_field){
9415
+ lookupTag += "__" + __lookupField.reference_to_field;
9416
+ }
9417
+ __changedFilterFormValuesKey += lookupTag;
9418
+ }
9419
+ if(crud){
9420
+ let crudData = crud.getData();
9421
+ crudData[__changedFilterFormValuesKey] = changedFilterFormValues;
9422
+ crud.setData(crudData);
9423
+ }
9424
+
9425
+ let crudService = crud && SteedosUI.getClosestAmisComponentByType(crud.context, "service", {name: "service_object_table_crud"});
9289
9426
  crudService && crudService.setData({isFieldsFilterEmpty});
9290
9427
  `;
9291
9428
  let onChangeScript = `
@@ -9300,7 +9437,7 @@ async function getObjectFilter(objectSchema, fields, options) {
9300
9437
  filterFormValues = JSON.parse(JSON.stringify(filterFormValues)); //只取当层数据域中数据,去除__super层数据
9301
9438
  let crud = SteedosUI.getClosestAmisComponentByType(scope, "crud");
9302
9439
  const changedFilterFormValues = _.pickBy(filterFormValues, function(n,k){return /^__searchable__/.test(k);});;
9303
- // let crudService = crud && SteedosUI.getClosestAmisComponentByType(crud.context, "service");
9440
+ // let crudService = crud && SteedosUI.getClosestAmisComponentByType(crud.context, "service", {name: "service_object_table_crud"});
9304
9441
  // crudService && crudService.setData({__changedFilterFormValues: changedFilterFormValues});
9305
9442
  // 这里不用crudService而用crud是因为lookup字段弹出的列表中的crudService中的变量无法传入crud的发送适配器中
9306
9443
  // crud && crud.setData({__changedFilterFormValues: changedFilterFormValues});
@@ -9656,7 +9793,7 @@ async function getObjectCRUD(objectSchema, fields, options){
9656
9793
  className: crudModeClassName,
9657
9794
  //目前crud的service层id不认用户自定义id,只支持默认规则id,许多地方的格式都写死了service_listview_${objectname}
9658
9795
  id: `service_${id}`,
9659
- name: `page`,
9796
+ name: "service_object_table_crud",
9660
9797
  data: options.amisData,
9661
9798
  body: body,
9662
9799
  //监听广播事件,重算crud高度
@@ -9820,6 +9957,17 @@ async function getObjectForm(objectSchema, ctx){
9820
9957
  },
9821
9958
  "expression": `\${_master.objectName != '${objectSchema.name}' && _master.objectName}`
9822
9959
  },
9960
+ // 列表视图、对象表格组件上的lookup字段,点开右侧弹出drawer窗口,修改记录后刷新列表
9961
+ {
9962
+ "actionType": "broadcast",
9963
+ "args": {
9964
+ "eventName": "@data.changed.${_tableObjectName}"
9965
+ },
9966
+ "data": {
9967
+ "objectName": "${_tableObjectName}"
9968
+ },
9969
+ "expression": `\${_tableObjectName != '${objectSchema.name}' && _tableObjectName}`
9970
+ },
9823
9971
  ...submitSuccActions,
9824
9972
  // {
9825
9973
  // "actionType": "custom",
@@ -10003,8 +10151,8 @@ const getRecordPermissions = async (objectName, recordId)=>{
10003
10151
  /*
10004
10152
  * @Author: baozhoutao@steedos.com
10005
10153
  * @Date: 2022-07-05 15:55:39
10006
- * @LastEditors: baozhoutao@steedos.com
10007
- * @LastEditTime: 2024-02-18 14:46:50
10154
+ * @LastEditors: 殷亮辉 yinlianghui@hotoa.com
10155
+ * @LastEditTime: 2025-01-08 13:32:51
10008
10156
  * @Description:
10009
10157
  */
10010
10158
 
@@ -10078,7 +10226,7 @@ async function getObjectRelatedList(
10078
10226
 
10079
10227
  // 获取单个相关表
10080
10228
  async function getRecordDetailRelatedListSchema(objectName, recordId, relatedObjectName, relatedKey, ctx){
10081
- let { top, perPage, appId, relatedLabel, className, columns, sort, filters, visible_on } = ctx;
10229
+ let { top, perPage, appId, relatedLabel, className, columns, sort, filters, visible_on, enableHeaderToolbar } = ctx;
10082
10230
  // console.log('getRecordDetailRelatedListSchema==>',objectName,recordId,relatedObjectName)
10083
10231
  const relatedObjectUiSchema = await getUISchema(relatedObjectName);
10084
10232
  if(!relatedObjectUiSchema){
@@ -10143,6 +10291,10 @@ async function getRecordDetailRelatedListSchema(objectName, recordId, relatedObj
10143
10291
  let headerToolbar = [];
10144
10292
  if(!isMobile){
10145
10293
  headerToolbar.push("bulkActions");
10294
+ if (enableHeaderToolbar) {
10295
+ // 通过 enableHeaderToolbar = true 可以控制是否显示内置的带过滤器的headerToolbar
10296
+ headerToolbar = undefined;
10297
+ }
10146
10298
  }
10147
10299
  const options = {
10148
10300
  globalFilter,
@@ -10181,7 +10333,7 @@ async function getRecordDetailRelatedListSchema(objectName, recordId, relatedObj
10181
10333
  amisSchema: {
10182
10334
  type: "service",
10183
10335
  id: componentId,
10184
- className: `steedos-record-related-list mb-4 last:mb-0 ${componentId} ${className}`,
10336
+ className: `steedos-record-related-list mb-4 last:mb-0 ${componentId} ${className} ${enableHeaderToolbar ? 'enable-header-toolbar' : ''}`,
10185
10337
  data: {
10186
10338
  relatedKey: relatedKey,
10187
10339
  listViewId: `amis-\${appId}-${relatedObjectName}-listview`,
@@ -10283,6 +10435,7 @@ async function getRelatedListSchema(
10283
10435
  listViewName,
10284
10436
  ctx
10285
10437
  ) {
10438
+ const { enableHeaderToolbar } = ctx;
10286
10439
  const uiSchema = await getUISchema(objectName);
10287
10440
  if(!uiSchema){
10288
10441
  return {}
@@ -10335,10 +10488,14 @@ async function getRelatedListSchema(
10335
10488
  delete ctx.filters;
10336
10489
 
10337
10490
  delete ctx.globalFilter;
10491
+ delete ctx.enableHeaderToolbar;
10338
10492
 
10339
10493
  const adaptor = `
10340
10494
  try{
10341
10495
  if(setDataToComponentId){
10496
+ // 子表列表在headerToolbar过滤器中设置过过滤条件的话,始终显示子表列表,无论是否查询到数据
10497
+ // 改为使用css样式控制子表列表放开headerToolbar时,始终显示crud,只隐藏crud内部的表格,从而始终显示headerToolbar不受这里逻辑影响
10498
+ // var headerToolbarFilterChanged = context.isFieldsFilterEmpty === false;
10342
10499
  if(payload.data.count){
10343
10500
  setTimeout(function(){
10344
10501
  // 设计器中获取不到window.$从而导致报错, 所以用纯js替换下。
@@ -10361,7 +10518,7 @@ async function getRelatedListSchema(
10361
10518
  "filters": listviewFilter,
10362
10519
  "filtersFunction": filtersFunction,
10363
10520
  "sort": listViewSort,
10364
- "filterVisible": false,
10521
+ "filterVisible": !!enableHeaderToolbar,
10365
10522
  "requestAdaptor": ctx.requestAdaptor,
10366
10523
  "adaptor": adaptor + ctx.adaptor || '',
10367
10524
  "ctx": ctx,
@@ -10917,7 +11074,8 @@ async function getRecordDetailHeaderSchema(objectName,recordId, options){
10917
11074
  }
10918
11075
 
10919
11076
  async function getRecordDetailSchema(objectName, appId, props = {}){
10920
- const uiSchema = await getUISchema(objectName);
11077
+ const uiSchema = await getUISchema(objectName);
11078
+
10921
11079
  const relatedLists = await getObjectRelatedList(objectName);
10922
11080
  const detailed = {
10923
11081
  "title": i18next.t('frontend_record_detail_tab_detailed'),
@@ -10956,6 +11114,21 @@ async function getRecordDetailSchema(objectName, appId, props = {}){
10956
11114
  if(relatedLists.length){
10957
11115
  content.tabs.push(related);
10958
11116
  }
11117
+ const contents = [content];
11118
+ if (uiSchema.enable_chatter && window.BuilderLiveblocks) {
11119
+ const chatter = {
11120
+ "type": "rooms-provider",
11121
+ "baseUrl": "${context.rootUrl}",
11122
+ "body": [
11123
+ {
11124
+ "type": "rooms-comments",
11125
+ "className": "flex flex-col gap-3 m-4",
11126
+ "roomId": "objects:${objectName}:${recordId}",
11127
+ }
11128
+ ]
11129
+ };
11130
+ contents.push(chatter);
11131
+ }
10959
11132
  // content.tabs = reverse(content.tabs)
10960
11133
  return {
10961
11134
  uiSchema,
@@ -10971,7 +11144,7 @@ async function getRecordDetailSchema(objectName, appId, props = {}){
10971
11144
  "showButtons": props.showButtons,
10972
11145
  "showBackButton": props.showBackButton,
10973
11146
  },
10974
- content
11147
+ ...contents,
10975
11148
  ],
10976
11149
  "objectApiName": "${objectName}",
10977
11150
  "recordId": "${recordId}",
@@ -11755,14 +11928,42 @@ function getLookupSapceUserTreeSchema(isMobile){
11755
11928
  {
11756
11929
  "actionType": "custom",
11757
11930
  "script": `
11931
+ console.log("lookup-tree-event.data:",event.data);
11932
+ console.log("lookup-tree-event.data.value.label:",event.data.value.label);
11933
+ console.log("lookup-tree-event.data.value.value:",event.data.value.value);
11758
11934
  const scope = event.context.scoped;
11759
- var filterFormValues={
11935
+ var treeFilterFormValues={
11760
11936
  "__searchable__organizations_parents":event.data.value.value
11761
11937
  }
11762
- var listView = scope.parent.getComponents().find(function(n){
11763
- return n.props.type === "crud";
11938
+ // var listView = scope.parent.getComponents().find(function(n){
11939
+ // return n.props.type === "crud";
11940
+ // });
11941
+ // listView.handleFilterSubmit(Object.assign({}, filterFormValues));
11942
+ let __lookupField = event.data.__lookupField;
11943
+ let crud = SteedosUI.getClosestAmisComponentByType(scope, "crud");
11944
+ var filterForm = scope.getComponents().find(function(n){
11945
+ return n.props.type === "form";
11764
11946
  });
11765
- listView.handleFilterSubmit(Object.assign({}, filterFormValues));
11947
+ let filterFormValues = filterForm.getData();
11948
+ filterFormValues = JSON.parse(JSON.stringify(filterFormValues)); //只取当层数据域中数据,去除__super层数据
11949
+ const changedFilterFormValues = _.pickBy(filterFormValues, function(n,k){return /^__searchable__/.test(k);});
11950
+ Object.assign(changedFilterFormValues, treeFilterFormValues);
11951
+ // 同步__changedFilterFormValues中的值
11952
+ let __changedFilterFormValuesKey = "__changedFilterFormValues";
11953
+ if(__lookupField){
11954
+ let lookupTag = "__lookup__" + __lookupField.name + "__" + __lookupField.reference_to;
11955
+ if(__lookupField.reference_to_field){
11956
+ lookupTag += "__" + __lookupField.reference_to_field;
11957
+ }
11958
+ __changedFilterFormValuesKey += lookupTag;
11959
+ }
11960
+ if(crud){
11961
+ let crudData = crud.getData();
11962
+ crudData[__changedFilterFormValuesKey] = changedFilterFormValues;
11963
+ crud.setData(crudData);
11964
+ }
11965
+ filterForm.setData(treeFilterFormValues);
11966
+ filterForm.handleFormSubmit(event);
11766
11967
  `
11767
11968
  },
11768
11969
  {
@@ -11856,6 +12057,9 @@ async function lookupToAmisPicker(field, readonly, ctx){
11856
12057
  ctx.idFieldName = refObjectConfig.idFieldName;
11857
12058
  ctx.objectName = refObjectConfig.name;
11858
12059
 
12060
+ // 是否显示lookup字段左侧的过滤器(如果有的话),默认为true,目前只有lookup选人字段有左侧树过滤器
12061
+ const showLeftFilter = field.show_left_filter !== false;
12062
+
11859
12063
  let tableFields = [];
11860
12064
  const searchableFields = [];
11861
12065
 
@@ -11977,6 +12181,7 @@ async function lookupToAmisPicker(field, readonly, ctx){
11977
12181
  // field.name可能是带点的名称,比如审批王中子表字段'instances.instances_submitter',如果不替换掉点,会造成审批王表单中新建子表行时报错
11978
12182
  let keywordsSearchBoxName = `__keywords_lookup__${field.name.replace(/\./g, "_")}__to__${refObjectConfig.name}`;
11979
12183
 
12184
+ const filterFormValues = field.filter_form_data;
11980
12185
  source.requestAdaptor = `
11981
12186
  let __changedFilterFormValuesKey = "__changedFilterFormValues";
11982
12187
  let __lookupField = api.data.$self.__lookupField;
@@ -12019,7 +12224,20 @@ async function lookupToAmisPicker(field, readonly, ctx){
12019
12224
  }
12020
12225
  }
12021
12226
 
12022
- var searchableFilter = SteedosUI.getSearchFilter(selfData) || [];
12227
+ let filterFormValues = {};
12228
+ if (selfData.op !== 'loadOptions'){
12229
+ filterFormValues = ${_$1.isObject(filterFormValues) ? JSON.stringify(filterFormValues) : ('"' + filterFormValues + '"')} || {};
12230
+ const isAmisFormula = typeof filterFormValues === "string" && filterFormValues.indexOf("\${") > -1;
12231
+ if (isAmisFormula){
12232
+ filterFormValues = AmisCore.evaluate(filterFormValues, context) || {};
12233
+ }
12234
+ if (_.isObject(filterFormValues) || !_.isEmpty(filterFormValues)){
12235
+ let fields = api.data.$self.uiSchema && api.data.$self.uiSchema.fields;
12236
+ filterFormValues = SteedosUI.getSearchFilterFormValues(filterFormValues, fields);
12237
+ }
12238
+ }
12239
+
12240
+ var searchableFilter = SteedosUI.getSearchFilter(Object.assign({}, { ...filterFormValues }, selfData)) || [];
12023
12241
 
12024
12242
  if(searchableFilter.length > 0){
12025
12243
  if(filters.length > 0 ){
@@ -12187,6 +12405,20 @@ async function lookupToAmisPicker(field, readonly, ctx){
12187
12405
  });
12188
12406
  payload.data.rows = updatedResult;
12189
12407
  }
12408
+ let __changedFilterFormValuesKey = "__changedFilterFormValues";
12409
+ let __lookupField = api.data.$self.__lookupField;
12410
+ if(__lookupField){
12411
+ let lookupTag = "__lookup__" + __lookupField.name + "__" + __lookupField.reference_to;
12412
+ if(__lookupField.reference_to_field){
12413
+ lookupTag += "__" + __lookupField.reference_to_field;
12414
+ }
12415
+ __changedFilterFormValuesKey += lookupTag;
12416
+ }
12417
+ let __changedFilterFormValues = api.context[__changedFilterFormValuesKey] || {};
12418
+ let __changedSearchBoxValues = api.context.__changedSearchBoxValues || {};
12419
+ // 列表搜索和快速搜索,有时在某些操作情况下还是会造成crud接口请求使用的过滤条件是上次的,这里强制把正确的过滤条件返回到crud,详细规则见:https://github.com/steedos/steedos-platform/issues/7112
12420
+ payload.data[__changedFilterFormValuesKey] = __changedFilterFormValues;
12421
+ payload.data.__changedSearchBoxValues = __changedSearchBoxValues;
12190
12422
  return payload;
12191
12423
  `;
12192
12424
  if(field.optionsFunction || field._optionsFunction){
@@ -12195,7 +12427,7 @@ async function lookupToAmisPicker(field, readonly, ctx){
12195
12427
  return payload;
12196
12428
  `;
12197
12429
  }
12198
- let top = 20;
12430
+ let top = 500;
12199
12431
 
12200
12432
  if(refObjectConfig.paging && refObjectConfig.paging.enabled === false){
12201
12433
  top = 1000;
@@ -12222,7 +12454,7 @@ async function lookupToAmisPicker(field, readonly, ctx){
12222
12454
 
12223
12455
  pickerSchema.headerToolbar = getObjectHeaderToolbar(refObjectConfig, fieldsArr, ctx.formFactor, { isLookup: true, keywordsSearchBoxName });
12224
12456
 
12225
- if(referenceTo.objectName === "space_users" && field.reference_to_field === "user"){
12457
+ if(referenceTo.objectName === "space_users" && field.reference_to_field === "user" && showLeftFilter){
12226
12458
  pickerSchema.headerToolbar.push(getLookupSapceUserTreeSchema(isMobile));
12227
12459
  pickerSchema.className = pickerSchema.className || "" + " steedos-select-user";
12228
12460
  }
@@ -12242,7 +12474,11 @@ async function lookupToAmisPicker(field, readonly, ctx){
12242
12474
  pickerSchema.filter = await getObjectFilter(refObjectConfig, fields, {
12243
12475
  ...ctx,
12244
12476
  isLookup: true,
12245
- keywordsSearchBoxName
12477
+ keywordsSearchBoxName,
12478
+ searchable_fields: field.searchable_fields,
12479
+ auto_open_filter: field.auto_open_filter,
12480
+ show_left_filter: field.show_left_filter,
12481
+ filter_form_data: field.filter_form_data
12246
12482
  });
12247
12483
  }
12248
12484
  pickerSchema.data = Object.assign({}, pickerSchema.data, {
@@ -12309,7 +12545,7 @@ async function lookupToAmisPicker(field, readonly, ctx){
12309
12545
  }
12310
12546
 
12311
12547
  const ctx = ${JSON.stringify(ctx)};
12312
- const componentId = ctx.defaults.formSchema.id;
12548
+ const componentId = ctx.defaults && ctx.defaults.formSchema && ctx.defaults.formSchema.id;
12313
12549
  doAction({
12314
12550
  actionType: 'setValue',
12315
12551
  componentId: componentId,
@@ -12736,6 +12972,10 @@ async function lookupToAmis(field, readonly, ctx){
12736
12972
  }
12737
12973
  let amisSchema;
12738
12974
  // 默认使用下拉框模式显示lookup选项,只能配置了enable_enhanced_lookup才使用弹出增强模式
12975
+ if(enableEnhancedLookup == true && field.amis && field.amis.type && field.amis.type !== 'picker'){
12976
+ // 如果配置了amis.type且其值不是picker,则不使用弹出增强模式
12977
+ enableEnhancedLookup = false;
12978
+ }
12739
12979
  if(enableEnhancedLookup == true){
12740
12980
  amisSchema = await lookupToAmisPicker(field, readonly, ctx);
12741
12981
  }else if(refObject.enable_tree) {
@@ -13867,7 +14107,16 @@ async function convertSFieldToAmisField(field, readonly, ctx) {
13867
14107
  return convertData
13868
14108
  }
13869
14109
  // if(ctx.mode === 'edit'){
13870
- let convertDataResult = Object.assign({}, baseData, convertData, { labelClassName: 'text-left', clearValueOnHidden: true, fieldName: field.name}, field.amis, {name: baseData.name});
14110
+ let convertDataResult;
14111
+ if(convertData.type == "steedos-field"){
14112
+ // 如果是steedos-field,不能把amis属性合并到steedos-field根属性中,要合并也是合并到steedos-field的config.amis中
14113
+ // 而steedos-field字段的amis属性本身就在config.amis中了,所以这里不需要再合并field.amis
14114
+ // 目前测试到受影响的是,把字段的amis属性配置为{"type": "checkboxes"}时,ObjectForm只读模式下,lookup字段返回的是type为steedos-field的组件,此时field.amis中的type不应该合并到steedos-field根属性中
14115
+ convertDataResult = Object.assign({}, baseData, convertData, { labelClassName: 'text-left', clearValueOnHidden: true, fieldName: field.name}, {name: baseData.name});
14116
+ }
14117
+ else {
14118
+ convertDataResult = Object.assign({}, baseData, convertData, { labelClassName: 'text-left', clearValueOnHidden: true, fieldName: field.name}, field.amis, {name: baseData.name});
14119
+ }
13871
14120
  // 只读时file字段的外层control层若存在name,内部each组件存在问题
13872
14121
  if(readonly && field.type == "file") {
13873
14122
  convertDataResult.name = "";
@@ -16012,7 +16261,7 @@ async function getListviewInitSchema(objectApiName, listViewName, ctx) {
16012
16261
  const defaults = ctx.defaults || {};
16013
16262
  if(!defaults.headerSchema){
16014
16263
  //传入isListviewInit是区别于对象列表类型的微页面,即getListPageInitSchema函数中该属性为false
16015
- const headerSchema = await getObjectListHeader$1(uiSchema, listViewName, {
16264
+ const headerSchema = await getObjectListHeader(uiSchema, listViewName, {
16016
16265
  onlySecordLine: true,
16017
16266
  isListviewInit: true
16018
16267
  });
@@ -18495,5 +18744,5 @@ const getInstanceInfo = async ({ instanceId, box }) => {
18495
18744
  };
18496
18745
  };
18497
18746
 
18498
- export { index as Field, Router, absoluteUrl, amisRender, amisRootClick, cloneObject, conditionsToFilters, createObject, defaultsDeep, deleteVariable, execute, executeButton, extendObject, fetchAPI, filtersToConditions, getAmisInputTableSchema, getApp, getApps, getAuthToken, getAuthorization, getButton, getButtonVisible, getButtonVisibleOn, getButtons, getCalendarSchema, getCreatedInfoTpl, getDateTimeTpl, getDateTpl, getDefaultRenderData, getEnv, getEnvs, getEvn, getField, getFieldTpl, getFileSrc, getFlowFormSchema, getFormPageInitSchema, getFormSchema, getGlobalNowData, getIdsPickerSchema, getImageSrc, getInstanceInfo, getListPageInitSchema, getListSchema, getListViewButtons, getListViewColumns, getListViewFilter, getListViewItemButtons, getListViewSort, getListviewInitSchema, getLocationTpl, getLookupSapceUserTreeSchema, getLookupTpl, getModifiedInfoTpl, getNameTpl, getNameTplUrl, getNotifications, getNumberTpl, getObjectDetailButtons, getObjectDetailButtonsSchemas, getObjectDetailMoreButtons, getObjectFieldsFilterBarSchema, getObjectFieldsFilterButtonSchema, getObjectFieldsFilterFormSchema, getObjectListHeader$1 as getObjectListHeader, getObjectListHeaderFieldsFilterBar, getObjectListHeaderFirstLine, getObjectListHeaderSecordLine, getObjectListViewButtonsSchemas, getObjectRecordDetailHeader, getObjectRecordDetailRelatedListButtonsSchemas, getObjectRecordDetailRelatedListHeader, getObjectRelated, getObjectRelatedList, getObjectRelatedListButtons, getObjectRelatedListHeader, getObjectRelatedListsMiniSchema, getPage, getPasswordTpl, getRecord, getRecordDetailHeaderSchema, getRecordDetailMiniSchema, getRecordDetailRelatedListSchema, getRecordDetailSchema, getRecordPageInitSchema, getRecordPermissions, getRecordServiceSchema, getRefObjectNameFieldName, getReferenceTo, getReferenceToFieldSchema, getReferenceToSync, getRelatedFieldTpl, getRelatedFieldValue, getRelatedListSchema, getRelatedsCount, getRootUrl, getSelectMap, getSelectTpl, getSelectUserSchema, getSpaceUsersPickerAmisSchema, getSpaceUsersPickerSchema, getSteedosAuth, getSwitchTpl, getTableSchema, getTenantId, getTimeTpl, getUISchema, getUISchemaSync$1 as getUISchemaSync, getUiFieldTpl, getUiFileSizeTpl, getUserId, getViewSchema, isExpression, isObject, lookupToAmis, lookupToAmisIdsPicker, lookupToAmisPicker, lookupToAmisSelect, lookupToAmisSelectUser, markReadAll, parseSingleExpression, registerRemoteAssets, registerRenders, setEnv, setEnvs, setRootUrl, setSteedosAuth, setUISchemaFunction, setVariable, standardButtonsTodo, uuidv4 };
18747
+ export { index as Field, Router, absoluteUrl, amisRender, amisRootClick, cloneObject, conditionsToFilters, createObject, defaultsDeep, deleteVariable, execute, executeButton, extendObject, fetchAPI, filtersToConditions, getAmisInputTableSchema, getApp, getApps, getAuthToken, getAuthorization, getButton, getButtonVisible, getButtonVisibleOn, getButtons, getCalendarSchema, getCreatedInfoTpl, getDateTimeTpl, getDateTpl, getDefaultRenderData, getEnv, getEnvs, getEvn, getField, getFieldTpl, getFileSrc, getFlowFormSchema, getFormPageInitSchema, getFormSchema, getGlobalNowData, getIdsPickerSchema, getImageSrc, getInstanceInfo, getListPageInitSchema, getListSchema, getListViewButtons, getListViewColumns, getListViewFilter, getListViewItemButtons, getListViewSort, getListviewInitSchema, getLocationTpl, getLookupSapceUserTreeSchema, getLookupTpl, getModifiedInfoTpl, getNameTpl, getNameTplUrl, getNotifications, getNumberTpl, getObjectDetailButtons, getObjectDetailButtonsSchemas, getObjectDetailMoreButtons, getObjectFieldsFilterBarSchema, getObjectFieldsFilterButtonSchema, getObjectFieldsFilterFormSchema, getObjectListHeader, getObjectListHeaderFieldsFilterBar, getObjectListHeaderFirstLine, getObjectListHeaderSecordLine, getObjectListViewButtonsSchemas, getObjectRecordDetailHeader, getObjectRecordDetailRelatedListButtonsSchemas, getObjectRecordDetailRelatedListHeader, getObjectRelated, getObjectRelatedList, getObjectRelatedListButtons, getObjectRelatedListHeader, getObjectRelatedListsMiniSchema, getPage, getPasswordTpl, getRecord, getRecordDetailHeaderSchema, getRecordDetailMiniSchema, getRecordDetailRelatedListSchema, getRecordDetailSchema, getRecordPageInitSchema, getRecordPermissions, getRecordServiceSchema, getRefObjectNameFieldName, getReferenceTo, getReferenceToFieldSchema, getReferenceToSync, getRelatedFieldTpl, getRelatedFieldValue, getRelatedListSchema, getRelatedsCount, getRootUrl, getSelectMap, getSelectTpl, getSelectUserSchema, getSpaceUsersPickerAmisSchema, getSpaceUsersPickerSchema, getSteedosAuth, getSwitchTpl, getTableSchema, getTenantId, getTimeTpl, getUISchema, getUISchemaSync$1 as getUISchemaSync, getUiFieldTpl, getUiFileSizeTpl, getUserId, getViewSchema, isExpression, isObject, lookupToAmis, lookupToAmisIdsPicker, lookupToAmisPicker, lookupToAmisSelect, lookupToAmisSelectUser, markReadAll, parseSingleExpression, registerRemoteAssets, registerRenders, setEnv, setEnvs, setRootUrl, setSteedosAuth, setUISchemaFunction, setVariable, standardButtonsTodo, uuidv4 };
18499
18748
  //# sourceMappingURL=index.esm.js.map