@fctc/widget-logic 3.7.9 → 3.8.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/dist/index.js CHANGED
@@ -5320,6 +5320,7 @@ var statusDropdownController = (props) => {
5320
5320
 
5321
5321
  // src/widget/basic/many2one-field/controller.ts
5322
5322
  var import_react16 = require("react");
5323
+ var MANY2ONE_EXTERNAL = "many2one_external";
5323
5324
  var many2oneFieldController = (props) => {
5324
5325
  const {
5325
5326
  methods,
@@ -5334,7 +5335,8 @@ var many2oneFieldController = (props) => {
5334
5335
  showDetail,
5335
5336
  service,
5336
5337
  xNode,
5337
- isForm
5338
+ isForm,
5339
+ widget
5338
5340
  } = props;
5339
5341
  const { env } = (0, provider_exports.useEnv)();
5340
5342
  const { action, user } = useAppProvider();
@@ -5348,39 +5350,47 @@ var many2oneFieldController = (props) => {
5348
5350
  const [domainObject, setDomainObject] = (0, import_react16.useState)(null);
5349
5351
  const dataUser = user?.userProfile?.data;
5350
5352
  const initValue = methods?.getValues(name);
5351
- const optionsObject = (0, utils_exports.evalJSONContext)(fieldOptions) || {};
5352
5353
  const contextObject = {
5353
- ...(0, utils_exports.evalJSONContext)(action?.context) || {},
5354
+ ...(typeof action?.context === "string" ? (0, utils_exports.evalJSONContext)(action?.context) : action?.context) || {},
5354
5355
  ...fieldContext,
5355
5356
  ...env?.context
5356
5357
  };
5358
+ const optionsObject = typeof fieldOptions === "string" ? (0, utils_exports.evalJSONContext)(fieldOptions, {
5359
+ ...formValues,
5360
+ ...contextObject,
5361
+ context: contextObject,
5362
+ parent: { ...formValues }
5363
+ }) : fieldOptions;
5357
5364
  const fetchGetDetail = useGetDetail2();
5358
5365
  const data = {
5359
- model: relation,
5360
- domain: domainObject,
5361
- context: contextObject,
5362
- specification: {
5366
+ model: widget === MANY2ONE_EXTERNAL ? optionsObject?.model : relation,
5367
+ domain: widget === MANY2ONE_EXTERNAL ? optionsObject?.domain : domainObject,
5368
+ context: {
5369
+ ...contextObject,
5370
+ ...optionsObject?.context
5371
+ },
5372
+ specification: widget === MANY2ONE_EXTERNAL ? optionsObject?.specification : {
5363
5373
  id: {},
5364
5374
  name: {},
5365
5375
  display_name: {}
5366
5376
  }
5367
5377
  };
5368
- const queryKey = [`data_${relation}`, domainObject];
5369
5378
  const {
5370
5379
  data: dataOfSelection,
5371
5380
  refetch,
5372
5381
  isFetching
5373
5382
  } = useGetSelection3({
5374
5383
  data,
5375
- queryKey,
5384
+ queryKey: [`data_${relation}`, domainObject],
5376
5385
  enabled: false,
5377
- service,
5386
+ service: widget === MANY2ONE_EXTERNAL ? optionsObject?.service : service,
5378
5387
  xNode
5379
5388
  });
5380
5389
  const selectOptions = (0, import_react16.useMemo)(() => {
5381
5390
  return dataOfSelection?.records?.map((val) => ({
5382
5391
  value: val?.id,
5383
- label: val?.display_name || val?.name
5392
+ label: val?.display_name || val?.name,
5393
+ ...widget === MANY2ONE_EXTERNAL ? val : {}
5384
5394
  })) || [];
5385
5395
  }, [dataOfSelection]);
5386
5396
  (0, import_react16.useEffect)(() => {
@@ -5409,13 +5419,13 @@ var many2oneFieldController = (props) => {
5409
5419
  methods?.setValue(name, null);
5410
5420
  setTempSelectedOption(null);
5411
5421
  } else if (propValue) {
5412
- if (isForm && fieldOptions?.includes("service") && fieldOptions?.includes("type") && fieldOptions?.includes("model")) {
5422
+ if (isForm && fieldOptions?.includes("service") && fieldOptions?.includes("type") && fieldOptions?.includes("model") && !propValue?.display_name) {
5413
5423
  const optionsMany2OneField = fieldOptions ? (0, utils_exports.evalJSONContext)(fieldOptions) : null;
5414
5424
  fetchGetDetail.mutate(
5415
5425
  {
5416
5426
  model: optionsMany2OneField?.model,
5417
- ids: propValue,
5418
- specification: {
5427
+ ids: propValue?.id ?? propValue,
5428
+ specification: widget === MANY2ONE_EXTERNAL ? optionsObject?.specification : {
5419
5429
  id: {},
5420
5430
  display_name: {}
5421
5431
  },
@@ -5424,11 +5434,23 @@ var many2oneFieldController = (props) => {
5424
5434
  xNode: service == "wesap" && dataUser.x_node
5425
5435
  },
5426
5436
  {
5427
- onSuccess: (detailData) => {
5437
+ onSuccess: (dataResponse) => {
5438
+ const detailData = dataResponse?.[0];
5428
5439
  setTempSelectedOption({
5429
- value: detailData?.[0]?.id,
5430
- label: detailData?.[0]?.display_name
5440
+ value: detailData?.id,
5441
+ label: detailData?.display_name
5431
5442
  });
5443
+ if (widget === MANY2ONE_EXTERNAL && optionsObject?.values_included) {
5444
+ Object.keys(optionsObject?.values_included)?.forEach(
5445
+ (field) => {
5446
+ methods?.setValue(
5447
+ optionsObject?.values_included[field]?.name,
5448
+ detailData?.[field]
5449
+ );
5450
+ }
5451
+ );
5452
+ methods?.setValue(name, detailData);
5453
+ }
5432
5454
  },
5433
5455
  onError: (error) => {
5434
5456
  console.log("error", error);
@@ -5466,18 +5488,29 @@ var many2oneFieldController = (props) => {
5466
5488
  const newOption = listOptions?.find(
5467
5489
  (option) => option.value === idRecord
5468
5490
  );
5491
+ const newValue = widget === MANY2ONE_EXTERNAL && optionsObject?.field_name ? newOption?.[optionsObject?.field_name] : newOption.value;
5492
+ if (widget === MANY2ONE_EXTERNAL && optionsObject?.values_included) {
5493
+ Object.keys(optionsObject?.values_included)?.forEach((field) => {
5494
+ methods?.setValue(
5495
+ optionsObject?.values_included[field]?.name,
5496
+ newOption?.[field]
5497
+ );
5498
+ });
5499
+ }
5469
5500
  if (newOption) {
5470
5501
  methods.setValue(
5471
5502
  name,
5472
5503
  {
5473
- id: newOption.value,
5504
+ ...newOption,
5505
+ id: newValue,
5474
5506
  display_name: newOption?.label
5475
5507
  },
5476
5508
  { shouldDirty: true }
5477
5509
  );
5478
5510
  setTempSelectedOption(newOption);
5479
5511
  onChange && onChange(String(name), {
5480
- id: newOption?.value,
5512
+ ...newOption,
5513
+ id: newValue,
5481
5514
  display_name: newOption?.label
5482
5515
  });
5483
5516
  methods.trigger(name);
@@ -5496,14 +5529,27 @@ var many2oneFieldController = (props) => {
5496
5529
  methods.trigger(name);
5497
5530
  return;
5498
5531
  }
5499
- const newValue = selectedOption.value;
5500
- methods.setValue(
5532
+ const newValue = widget === MANY2ONE_EXTERNAL && optionsObject?.field_name ? selectedOption?.[optionsObject?.field_name] : selectedOption.value;
5533
+ if (widget === MANY2ONE_EXTERNAL && optionsObject?.values_included) {
5534
+ Object.keys(optionsObject?.values_included)?.forEach((field) => {
5535
+ methods?.setValue(
5536
+ optionsObject?.values_included[field]?.name,
5537
+ selectedOption?.[field]
5538
+ );
5539
+ });
5540
+ }
5541
+ methods?.setValue(
5501
5542
  name,
5502
- { id: newValue, display_name: selectedOption?.label },
5543
+ {
5544
+ ...selectedOption,
5545
+ id: newValue,
5546
+ display_name: selectedOption?.label
5547
+ },
5503
5548
  { shouldDirty: true }
5504
5549
  );
5505
5550
  setTempSelectedOption(selectedOption);
5506
5551
  onChange && onChange(String(name), {
5552
+ ...selectedOption,
5507
5553
  id: newValue,
5508
5554
  display_name: selectedOption.label
5509
5555
  });
@@ -5522,14 +5568,19 @@ var many2oneFieldController = (props) => {
5522
5568
  domainModal,
5523
5569
  setInputValue,
5524
5570
  allowShowDetail,
5525
- contextObject,
5571
+ contextObject: {
5572
+ ...contextObject,
5573
+ ...optionsObject?.context
5574
+ },
5526
5575
  tempSelectedOption,
5527
5576
  listOptions,
5528
5577
  fetchMoreOptions,
5529
- domainObject,
5578
+ domainObject: widget === MANY2ONE_EXTERNAL ? optionsObject?.domain : domainObject,
5530
5579
  setIsShowModalMany2Many,
5531
5580
  setDomainObject,
5532
- options: (0, utils_exports.evalJSONContext)(fieldOptions)
5581
+ options: optionsObject,
5582
+ relation: widget === MANY2ONE_EXTERNAL ? optionsObject?.model : relation,
5583
+ service: widget === MANY2ONE_EXTERNAL ? optionsObject?.service : service
5533
5584
  };
5534
5585
  };
5535
5586
 
@@ -5588,7 +5639,9 @@ var many2manyFieldController = (props) => {
5588
5639
  [false, "list"],
5589
5640
  [false, "search"]
5590
5641
  ],
5591
- context: contextObject
5642
+ context: contextObject,
5643
+ service,
5644
+ xNode: service == "wesap" && dataUser?.x_node
5592
5645
  };
5593
5646
  const { data: viewResponse } = useGetView2({
5594
5647
  viewParams,
@@ -5611,7 +5664,7 @@ var many2manyFieldController = (props) => {
5611
5664
  model: relation ?? "",
5612
5665
  viewData: viewResponse,
5613
5666
  service,
5614
- xNode: service == "wesap" && dataUser.x_node
5667
+ xNode: service == "wesap" && dataUser?.x_node
5615
5668
  });
5616
5669
  const {
5617
5670
  selectedRowKeys,
package/dist/index.mjs CHANGED
@@ -5400,6 +5400,7 @@ var statusDropdownController = (props) => {
5400
5400
 
5401
5401
  // src/widget/basic/many2one-field/controller.ts
5402
5402
  import { useCallback as useCallback4, useEffect as useEffect10, useMemo as useMemo8, useState as useState7 } from "react";
5403
+ var MANY2ONE_EXTERNAL = "many2one_external";
5403
5404
  var many2oneFieldController = (props) => {
5404
5405
  const {
5405
5406
  methods,
@@ -5414,7 +5415,8 @@ var many2oneFieldController = (props) => {
5414
5415
  showDetail,
5415
5416
  service,
5416
5417
  xNode,
5417
- isForm
5418
+ isForm,
5419
+ widget
5418
5420
  } = props;
5419
5421
  const { env } = (0, provider_exports.useEnv)();
5420
5422
  const { action, user } = useAppProvider();
@@ -5428,39 +5430,47 @@ var many2oneFieldController = (props) => {
5428
5430
  const [domainObject, setDomainObject] = useState7(null);
5429
5431
  const dataUser = user?.userProfile?.data;
5430
5432
  const initValue = methods?.getValues(name);
5431
- const optionsObject = (0, utils_exports.evalJSONContext)(fieldOptions) || {};
5432
5433
  const contextObject = {
5433
- ...(0, utils_exports.evalJSONContext)(action?.context) || {},
5434
+ ...(typeof action?.context === "string" ? (0, utils_exports.evalJSONContext)(action?.context) : action?.context) || {},
5434
5435
  ...fieldContext,
5435
5436
  ...env?.context
5436
5437
  };
5438
+ const optionsObject = typeof fieldOptions === "string" ? (0, utils_exports.evalJSONContext)(fieldOptions, {
5439
+ ...formValues,
5440
+ ...contextObject,
5441
+ context: contextObject,
5442
+ parent: { ...formValues }
5443
+ }) : fieldOptions;
5437
5444
  const fetchGetDetail = useGetDetail2();
5438
5445
  const data = {
5439
- model: relation,
5440
- domain: domainObject,
5441
- context: contextObject,
5442
- specification: {
5446
+ model: widget === MANY2ONE_EXTERNAL ? optionsObject?.model : relation,
5447
+ domain: widget === MANY2ONE_EXTERNAL ? optionsObject?.domain : domainObject,
5448
+ context: {
5449
+ ...contextObject,
5450
+ ...optionsObject?.context
5451
+ },
5452
+ specification: widget === MANY2ONE_EXTERNAL ? optionsObject?.specification : {
5443
5453
  id: {},
5444
5454
  name: {},
5445
5455
  display_name: {}
5446
5456
  }
5447
5457
  };
5448
- const queryKey = [`data_${relation}`, domainObject];
5449
5458
  const {
5450
5459
  data: dataOfSelection,
5451
5460
  refetch,
5452
5461
  isFetching
5453
5462
  } = useGetSelection3({
5454
5463
  data,
5455
- queryKey,
5464
+ queryKey: [`data_${relation}`, domainObject],
5456
5465
  enabled: false,
5457
- service,
5466
+ service: widget === MANY2ONE_EXTERNAL ? optionsObject?.service : service,
5458
5467
  xNode
5459
5468
  });
5460
5469
  const selectOptions = useMemo8(() => {
5461
5470
  return dataOfSelection?.records?.map((val) => ({
5462
5471
  value: val?.id,
5463
- label: val?.display_name || val?.name
5472
+ label: val?.display_name || val?.name,
5473
+ ...widget === MANY2ONE_EXTERNAL ? val : {}
5464
5474
  })) || [];
5465
5475
  }, [dataOfSelection]);
5466
5476
  useEffect10(() => {
@@ -5489,13 +5499,13 @@ var many2oneFieldController = (props) => {
5489
5499
  methods?.setValue(name, null);
5490
5500
  setTempSelectedOption(null);
5491
5501
  } else if (propValue) {
5492
- if (isForm && fieldOptions?.includes("service") && fieldOptions?.includes("type") && fieldOptions?.includes("model")) {
5502
+ if (isForm && fieldOptions?.includes("service") && fieldOptions?.includes("type") && fieldOptions?.includes("model") && !propValue?.display_name) {
5493
5503
  const optionsMany2OneField = fieldOptions ? (0, utils_exports.evalJSONContext)(fieldOptions) : null;
5494
5504
  fetchGetDetail.mutate(
5495
5505
  {
5496
5506
  model: optionsMany2OneField?.model,
5497
- ids: propValue,
5498
- specification: {
5507
+ ids: propValue?.id ?? propValue,
5508
+ specification: widget === MANY2ONE_EXTERNAL ? optionsObject?.specification : {
5499
5509
  id: {},
5500
5510
  display_name: {}
5501
5511
  },
@@ -5504,11 +5514,23 @@ var many2oneFieldController = (props) => {
5504
5514
  xNode: service == "wesap" && dataUser.x_node
5505
5515
  },
5506
5516
  {
5507
- onSuccess: (detailData) => {
5517
+ onSuccess: (dataResponse) => {
5518
+ const detailData = dataResponse?.[0];
5508
5519
  setTempSelectedOption({
5509
- value: detailData?.[0]?.id,
5510
- label: detailData?.[0]?.display_name
5520
+ value: detailData?.id,
5521
+ label: detailData?.display_name
5511
5522
  });
5523
+ if (widget === MANY2ONE_EXTERNAL && optionsObject?.values_included) {
5524
+ Object.keys(optionsObject?.values_included)?.forEach(
5525
+ (field) => {
5526
+ methods?.setValue(
5527
+ optionsObject?.values_included[field]?.name,
5528
+ detailData?.[field]
5529
+ );
5530
+ }
5531
+ );
5532
+ methods?.setValue(name, detailData);
5533
+ }
5512
5534
  },
5513
5535
  onError: (error) => {
5514
5536
  console.log("error", error);
@@ -5546,18 +5568,29 @@ var many2oneFieldController = (props) => {
5546
5568
  const newOption = listOptions?.find(
5547
5569
  (option) => option.value === idRecord
5548
5570
  );
5571
+ const newValue = widget === MANY2ONE_EXTERNAL && optionsObject?.field_name ? newOption?.[optionsObject?.field_name] : newOption.value;
5572
+ if (widget === MANY2ONE_EXTERNAL && optionsObject?.values_included) {
5573
+ Object.keys(optionsObject?.values_included)?.forEach((field) => {
5574
+ methods?.setValue(
5575
+ optionsObject?.values_included[field]?.name,
5576
+ newOption?.[field]
5577
+ );
5578
+ });
5579
+ }
5549
5580
  if (newOption) {
5550
5581
  methods.setValue(
5551
5582
  name,
5552
5583
  {
5553
- id: newOption.value,
5584
+ ...newOption,
5585
+ id: newValue,
5554
5586
  display_name: newOption?.label
5555
5587
  },
5556
5588
  { shouldDirty: true }
5557
5589
  );
5558
5590
  setTempSelectedOption(newOption);
5559
5591
  onChange && onChange(String(name), {
5560
- id: newOption?.value,
5592
+ ...newOption,
5593
+ id: newValue,
5561
5594
  display_name: newOption?.label
5562
5595
  });
5563
5596
  methods.trigger(name);
@@ -5576,14 +5609,27 @@ var many2oneFieldController = (props) => {
5576
5609
  methods.trigger(name);
5577
5610
  return;
5578
5611
  }
5579
- const newValue = selectedOption.value;
5580
- methods.setValue(
5612
+ const newValue = widget === MANY2ONE_EXTERNAL && optionsObject?.field_name ? selectedOption?.[optionsObject?.field_name] : selectedOption.value;
5613
+ if (widget === MANY2ONE_EXTERNAL && optionsObject?.values_included) {
5614
+ Object.keys(optionsObject?.values_included)?.forEach((field) => {
5615
+ methods?.setValue(
5616
+ optionsObject?.values_included[field]?.name,
5617
+ selectedOption?.[field]
5618
+ );
5619
+ });
5620
+ }
5621
+ methods?.setValue(
5581
5622
  name,
5582
- { id: newValue, display_name: selectedOption?.label },
5623
+ {
5624
+ ...selectedOption,
5625
+ id: newValue,
5626
+ display_name: selectedOption?.label
5627
+ },
5583
5628
  { shouldDirty: true }
5584
5629
  );
5585
5630
  setTempSelectedOption(selectedOption);
5586
5631
  onChange && onChange(String(name), {
5632
+ ...selectedOption,
5587
5633
  id: newValue,
5588
5634
  display_name: selectedOption.label
5589
5635
  });
@@ -5602,14 +5648,19 @@ var many2oneFieldController = (props) => {
5602
5648
  domainModal,
5603
5649
  setInputValue,
5604
5650
  allowShowDetail,
5605
- contextObject,
5651
+ contextObject: {
5652
+ ...contextObject,
5653
+ ...optionsObject?.context
5654
+ },
5606
5655
  tempSelectedOption,
5607
5656
  listOptions,
5608
5657
  fetchMoreOptions,
5609
- domainObject,
5658
+ domainObject: widget === MANY2ONE_EXTERNAL ? optionsObject?.domain : domainObject,
5610
5659
  setIsShowModalMany2Many,
5611
5660
  setDomainObject,
5612
- options: (0, utils_exports.evalJSONContext)(fieldOptions)
5661
+ options: optionsObject,
5662
+ relation: widget === MANY2ONE_EXTERNAL ? optionsObject?.model : relation,
5663
+ service: widget === MANY2ONE_EXTERNAL ? optionsObject?.service : service
5613
5664
  };
5614
5665
  };
5615
5666
 
@@ -5668,7 +5719,9 @@ var many2manyFieldController = (props) => {
5668
5719
  [false, "list"],
5669
5720
  [false, "search"]
5670
5721
  ],
5671
- context: contextObject
5722
+ context: contextObject,
5723
+ service,
5724
+ xNode: service == "wesap" && dataUser?.x_node
5672
5725
  };
5673
5726
  const { data: viewResponse } = useGetView2({
5674
5727
  viewParams,
@@ -5691,7 +5744,7 @@ var many2manyFieldController = (props) => {
5691
5744
  model: relation ?? "",
5692
5745
  viewData: viewResponse,
5693
5746
  service,
5694
- xNode: service == "wesap" && dataUser.x_node
5747
+ xNode: service == "wesap" && dataUser?.x_node
5695
5748
  });
5696
5749
  const {
5697
5750
  selectedRowKeys,
package/dist/widget.d.mts CHANGED
@@ -46,10 +46,12 @@ declare const many2oneFieldController: (props: IMany2OneProps) => {
46
46
  tempSelectedOption: any;
47
47
  listOptions: never[];
48
48
  fetchMoreOptions: () => void;
49
- domainObject: null;
49
+ domainObject: any;
50
50
  setIsShowModalMany2Many: react.Dispatch<react.SetStateAction<boolean>>;
51
51
  setDomainObject: react.Dispatch<react.SetStateAction<null>>;
52
52
  options: any;
53
+ relation: any;
54
+ service: any;
53
55
  };
54
56
 
55
57
  type Option = {
package/dist/widget.d.ts CHANGED
@@ -46,10 +46,12 @@ declare const many2oneFieldController: (props: IMany2OneProps) => {
46
46
  tempSelectedOption: any;
47
47
  listOptions: never[];
48
48
  fetchMoreOptions: () => void;
49
- domainObject: null;
49
+ domainObject: any;
50
50
  setIsShowModalMany2Many: react.Dispatch<react.SetStateAction<boolean>>;
51
51
  setDomainObject: react.Dispatch<react.SetStateAction<null>>;
52
52
  options: any;
53
+ relation: any;
54
+ service: any;
53
55
  };
54
56
 
55
57
  type Option = {
package/dist/widget.js CHANGED
@@ -4557,6 +4557,7 @@ var useListData = ({
4557
4557
  };
4558
4558
 
4559
4559
  // src/widget/basic/many2one-field/controller.ts
4560
+ var MANY2ONE_EXTERNAL = "many2one_external";
4560
4561
  var many2oneFieldController = (props) => {
4561
4562
  const {
4562
4563
  methods,
@@ -4571,7 +4572,8 @@ var many2oneFieldController = (props) => {
4571
4572
  showDetail,
4572
4573
  service,
4573
4574
  xNode,
4574
- isForm
4575
+ isForm,
4576
+ widget
4575
4577
  } = props;
4576
4578
  const { env } = (0, provider_exports.useEnv)();
4577
4579
  const { action, user } = useAppProvider();
@@ -4585,39 +4587,47 @@ var many2oneFieldController = (props) => {
4585
4587
  const [domainObject, setDomainObject] = (0, import_react16.useState)(null);
4586
4588
  const dataUser = user?.userProfile?.data;
4587
4589
  const initValue = methods?.getValues(name);
4588
- const optionsObject = (0, utils_exports.evalJSONContext)(fieldOptions) || {};
4589
4590
  const contextObject = {
4590
- ...(0, utils_exports.evalJSONContext)(action?.context) || {},
4591
+ ...(typeof action?.context === "string" ? (0, utils_exports.evalJSONContext)(action?.context) : action?.context) || {},
4591
4592
  ...fieldContext,
4592
4593
  ...env?.context
4593
4594
  };
4595
+ const optionsObject = typeof fieldOptions === "string" ? (0, utils_exports.evalJSONContext)(fieldOptions, {
4596
+ ...formValues,
4597
+ ...contextObject,
4598
+ context: contextObject,
4599
+ parent: { ...formValues }
4600
+ }) : fieldOptions;
4594
4601
  const fetchGetDetail = useGetDetail2();
4595
4602
  const data = {
4596
- model: relation,
4597
- domain: domainObject,
4598
- context: contextObject,
4599
- specification: {
4603
+ model: widget === MANY2ONE_EXTERNAL ? optionsObject?.model : relation,
4604
+ domain: widget === MANY2ONE_EXTERNAL ? optionsObject?.domain : domainObject,
4605
+ context: {
4606
+ ...contextObject,
4607
+ ...optionsObject?.context
4608
+ },
4609
+ specification: widget === MANY2ONE_EXTERNAL ? optionsObject?.specification : {
4600
4610
  id: {},
4601
4611
  name: {},
4602
4612
  display_name: {}
4603
4613
  }
4604
4614
  };
4605
- const queryKey = [`data_${relation}`, domainObject];
4606
4615
  const {
4607
4616
  data: dataOfSelection,
4608
4617
  refetch,
4609
4618
  isFetching
4610
4619
  } = useGetSelection3({
4611
4620
  data,
4612
- queryKey,
4621
+ queryKey: [`data_${relation}`, domainObject],
4613
4622
  enabled: false,
4614
- service,
4623
+ service: widget === MANY2ONE_EXTERNAL ? optionsObject?.service : service,
4615
4624
  xNode
4616
4625
  });
4617
4626
  const selectOptions = (0, import_react16.useMemo)(() => {
4618
4627
  return dataOfSelection?.records?.map((val) => ({
4619
4628
  value: val?.id,
4620
- label: val?.display_name || val?.name
4629
+ label: val?.display_name || val?.name,
4630
+ ...widget === MANY2ONE_EXTERNAL ? val : {}
4621
4631
  })) || [];
4622
4632
  }, [dataOfSelection]);
4623
4633
  (0, import_react16.useEffect)(() => {
@@ -4646,13 +4656,13 @@ var many2oneFieldController = (props) => {
4646
4656
  methods?.setValue(name, null);
4647
4657
  setTempSelectedOption(null);
4648
4658
  } else if (propValue) {
4649
- if (isForm && fieldOptions?.includes("service") && fieldOptions?.includes("type") && fieldOptions?.includes("model")) {
4659
+ if (isForm && fieldOptions?.includes("service") && fieldOptions?.includes("type") && fieldOptions?.includes("model") && !propValue?.display_name) {
4650
4660
  const optionsMany2OneField = fieldOptions ? (0, utils_exports.evalJSONContext)(fieldOptions) : null;
4651
4661
  fetchGetDetail.mutate(
4652
4662
  {
4653
4663
  model: optionsMany2OneField?.model,
4654
- ids: propValue,
4655
- specification: {
4664
+ ids: propValue?.id ?? propValue,
4665
+ specification: widget === MANY2ONE_EXTERNAL ? optionsObject?.specification : {
4656
4666
  id: {},
4657
4667
  display_name: {}
4658
4668
  },
@@ -4661,11 +4671,23 @@ var many2oneFieldController = (props) => {
4661
4671
  xNode: service == "wesap" && dataUser.x_node
4662
4672
  },
4663
4673
  {
4664
- onSuccess: (detailData) => {
4674
+ onSuccess: (dataResponse) => {
4675
+ const detailData = dataResponse?.[0];
4665
4676
  setTempSelectedOption({
4666
- value: detailData?.[0]?.id,
4667
- label: detailData?.[0]?.display_name
4677
+ value: detailData?.id,
4678
+ label: detailData?.display_name
4668
4679
  });
4680
+ if (widget === MANY2ONE_EXTERNAL && optionsObject?.values_included) {
4681
+ Object.keys(optionsObject?.values_included)?.forEach(
4682
+ (field) => {
4683
+ methods?.setValue(
4684
+ optionsObject?.values_included[field]?.name,
4685
+ detailData?.[field]
4686
+ );
4687
+ }
4688
+ );
4689
+ methods?.setValue(name, detailData);
4690
+ }
4669
4691
  },
4670
4692
  onError: (error) => {
4671
4693
  console.log("error", error);
@@ -4703,18 +4725,29 @@ var many2oneFieldController = (props) => {
4703
4725
  const newOption = listOptions?.find(
4704
4726
  (option) => option.value === idRecord
4705
4727
  );
4728
+ const newValue = widget === MANY2ONE_EXTERNAL && optionsObject?.field_name ? newOption?.[optionsObject?.field_name] : newOption.value;
4729
+ if (widget === MANY2ONE_EXTERNAL && optionsObject?.values_included) {
4730
+ Object.keys(optionsObject?.values_included)?.forEach((field) => {
4731
+ methods?.setValue(
4732
+ optionsObject?.values_included[field]?.name,
4733
+ newOption?.[field]
4734
+ );
4735
+ });
4736
+ }
4706
4737
  if (newOption) {
4707
4738
  methods.setValue(
4708
4739
  name,
4709
4740
  {
4710
- id: newOption.value,
4741
+ ...newOption,
4742
+ id: newValue,
4711
4743
  display_name: newOption?.label
4712
4744
  },
4713
4745
  { shouldDirty: true }
4714
4746
  );
4715
4747
  setTempSelectedOption(newOption);
4716
4748
  onChange && onChange(String(name), {
4717
- id: newOption?.value,
4749
+ ...newOption,
4750
+ id: newValue,
4718
4751
  display_name: newOption?.label
4719
4752
  });
4720
4753
  methods.trigger(name);
@@ -4733,14 +4766,27 @@ var many2oneFieldController = (props) => {
4733
4766
  methods.trigger(name);
4734
4767
  return;
4735
4768
  }
4736
- const newValue = selectedOption.value;
4737
- methods.setValue(
4769
+ const newValue = widget === MANY2ONE_EXTERNAL && optionsObject?.field_name ? selectedOption?.[optionsObject?.field_name] : selectedOption.value;
4770
+ if (widget === MANY2ONE_EXTERNAL && optionsObject?.values_included) {
4771
+ Object.keys(optionsObject?.values_included)?.forEach((field) => {
4772
+ methods?.setValue(
4773
+ optionsObject?.values_included[field]?.name,
4774
+ selectedOption?.[field]
4775
+ );
4776
+ });
4777
+ }
4778
+ methods?.setValue(
4738
4779
  name,
4739
- { id: newValue, display_name: selectedOption?.label },
4780
+ {
4781
+ ...selectedOption,
4782
+ id: newValue,
4783
+ display_name: selectedOption?.label
4784
+ },
4740
4785
  { shouldDirty: true }
4741
4786
  );
4742
4787
  setTempSelectedOption(selectedOption);
4743
4788
  onChange && onChange(String(name), {
4789
+ ...selectedOption,
4744
4790
  id: newValue,
4745
4791
  display_name: selectedOption.label
4746
4792
  });
@@ -4759,14 +4805,19 @@ var many2oneFieldController = (props) => {
4759
4805
  domainModal,
4760
4806
  setInputValue,
4761
4807
  allowShowDetail,
4762
- contextObject,
4808
+ contextObject: {
4809
+ ...contextObject,
4810
+ ...optionsObject?.context
4811
+ },
4763
4812
  tempSelectedOption,
4764
4813
  listOptions,
4765
4814
  fetchMoreOptions,
4766
- domainObject,
4815
+ domainObject: widget === MANY2ONE_EXTERNAL ? optionsObject?.domain : domainObject,
4767
4816
  setIsShowModalMany2Many,
4768
4817
  setDomainObject,
4769
- options: (0, utils_exports.evalJSONContext)(fieldOptions)
4818
+ options: optionsObject,
4819
+ relation: widget === MANY2ONE_EXTERNAL ? optionsObject?.model : relation,
4820
+ service: widget === MANY2ONE_EXTERNAL ? optionsObject?.service : service
4770
4821
  };
4771
4822
  };
4772
4823
 
@@ -4825,7 +4876,9 @@ var many2manyFieldController = (props) => {
4825
4876
  [false, "list"],
4826
4877
  [false, "search"]
4827
4878
  ],
4828
- context: contextObject
4879
+ context: contextObject,
4880
+ service,
4881
+ xNode: service == "wesap" && dataUser?.x_node
4829
4882
  };
4830
4883
  const { data: viewResponse } = useGetView2({
4831
4884
  viewParams,
@@ -4848,7 +4901,7 @@ var many2manyFieldController = (props) => {
4848
4901
  model: relation ?? "",
4849
4902
  viewData: viewResponse,
4850
4903
  service,
4851
- xNode: service == "wesap" && dataUser.x_node
4904
+ xNode: service == "wesap" && dataUser?.x_node
4852
4905
  });
4853
4906
  const {
4854
4907
  selectedRowKeys,
package/dist/widget.mjs CHANGED
@@ -4614,6 +4614,7 @@ var useListData = ({
4614
4614
  };
4615
4615
 
4616
4616
  // src/widget/basic/many2one-field/controller.ts
4617
+ var MANY2ONE_EXTERNAL = "many2one_external";
4617
4618
  var many2oneFieldController = (props) => {
4618
4619
  const {
4619
4620
  methods,
@@ -4628,7 +4629,8 @@ var many2oneFieldController = (props) => {
4628
4629
  showDetail,
4629
4630
  service,
4630
4631
  xNode,
4631
- isForm
4632
+ isForm,
4633
+ widget
4632
4634
  } = props;
4633
4635
  const { env } = (0, provider_exports.useEnv)();
4634
4636
  const { action, user } = useAppProvider();
@@ -4642,39 +4644,47 @@ var many2oneFieldController = (props) => {
4642
4644
  const [domainObject, setDomainObject] = useState7(null);
4643
4645
  const dataUser = user?.userProfile?.data;
4644
4646
  const initValue = methods?.getValues(name);
4645
- const optionsObject = (0, utils_exports.evalJSONContext)(fieldOptions) || {};
4646
4647
  const contextObject = {
4647
- ...(0, utils_exports.evalJSONContext)(action?.context) || {},
4648
+ ...(typeof action?.context === "string" ? (0, utils_exports.evalJSONContext)(action?.context) : action?.context) || {},
4648
4649
  ...fieldContext,
4649
4650
  ...env?.context
4650
4651
  };
4652
+ const optionsObject = typeof fieldOptions === "string" ? (0, utils_exports.evalJSONContext)(fieldOptions, {
4653
+ ...formValues,
4654
+ ...contextObject,
4655
+ context: contextObject,
4656
+ parent: { ...formValues }
4657
+ }) : fieldOptions;
4651
4658
  const fetchGetDetail = useGetDetail2();
4652
4659
  const data = {
4653
- model: relation,
4654
- domain: domainObject,
4655
- context: contextObject,
4656
- specification: {
4660
+ model: widget === MANY2ONE_EXTERNAL ? optionsObject?.model : relation,
4661
+ domain: widget === MANY2ONE_EXTERNAL ? optionsObject?.domain : domainObject,
4662
+ context: {
4663
+ ...contextObject,
4664
+ ...optionsObject?.context
4665
+ },
4666
+ specification: widget === MANY2ONE_EXTERNAL ? optionsObject?.specification : {
4657
4667
  id: {},
4658
4668
  name: {},
4659
4669
  display_name: {}
4660
4670
  }
4661
4671
  };
4662
- const queryKey = [`data_${relation}`, domainObject];
4663
4672
  const {
4664
4673
  data: dataOfSelection,
4665
4674
  refetch,
4666
4675
  isFetching
4667
4676
  } = useGetSelection3({
4668
4677
  data,
4669
- queryKey,
4678
+ queryKey: [`data_${relation}`, domainObject],
4670
4679
  enabled: false,
4671
- service,
4680
+ service: widget === MANY2ONE_EXTERNAL ? optionsObject?.service : service,
4672
4681
  xNode
4673
4682
  });
4674
4683
  const selectOptions = useMemo8(() => {
4675
4684
  return dataOfSelection?.records?.map((val) => ({
4676
4685
  value: val?.id,
4677
- label: val?.display_name || val?.name
4686
+ label: val?.display_name || val?.name,
4687
+ ...widget === MANY2ONE_EXTERNAL ? val : {}
4678
4688
  })) || [];
4679
4689
  }, [dataOfSelection]);
4680
4690
  useEffect10(() => {
@@ -4703,13 +4713,13 @@ var many2oneFieldController = (props) => {
4703
4713
  methods?.setValue(name, null);
4704
4714
  setTempSelectedOption(null);
4705
4715
  } else if (propValue) {
4706
- if (isForm && fieldOptions?.includes("service") && fieldOptions?.includes("type") && fieldOptions?.includes("model")) {
4716
+ if (isForm && fieldOptions?.includes("service") && fieldOptions?.includes("type") && fieldOptions?.includes("model") && !propValue?.display_name) {
4707
4717
  const optionsMany2OneField = fieldOptions ? (0, utils_exports.evalJSONContext)(fieldOptions) : null;
4708
4718
  fetchGetDetail.mutate(
4709
4719
  {
4710
4720
  model: optionsMany2OneField?.model,
4711
- ids: propValue,
4712
- specification: {
4721
+ ids: propValue?.id ?? propValue,
4722
+ specification: widget === MANY2ONE_EXTERNAL ? optionsObject?.specification : {
4713
4723
  id: {},
4714
4724
  display_name: {}
4715
4725
  },
@@ -4718,11 +4728,23 @@ var many2oneFieldController = (props) => {
4718
4728
  xNode: service == "wesap" && dataUser.x_node
4719
4729
  },
4720
4730
  {
4721
- onSuccess: (detailData) => {
4731
+ onSuccess: (dataResponse) => {
4732
+ const detailData = dataResponse?.[0];
4722
4733
  setTempSelectedOption({
4723
- value: detailData?.[0]?.id,
4724
- label: detailData?.[0]?.display_name
4734
+ value: detailData?.id,
4735
+ label: detailData?.display_name
4725
4736
  });
4737
+ if (widget === MANY2ONE_EXTERNAL && optionsObject?.values_included) {
4738
+ Object.keys(optionsObject?.values_included)?.forEach(
4739
+ (field) => {
4740
+ methods?.setValue(
4741
+ optionsObject?.values_included[field]?.name,
4742
+ detailData?.[field]
4743
+ );
4744
+ }
4745
+ );
4746
+ methods?.setValue(name, detailData);
4747
+ }
4726
4748
  },
4727
4749
  onError: (error) => {
4728
4750
  console.log("error", error);
@@ -4760,18 +4782,29 @@ var many2oneFieldController = (props) => {
4760
4782
  const newOption = listOptions?.find(
4761
4783
  (option) => option.value === idRecord
4762
4784
  );
4785
+ const newValue = widget === MANY2ONE_EXTERNAL && optionsObject?.field_name ? newOption?.[optionsObject?.field_name] : newOption.value;
4786
+ if (widget === MANY2ONE_EXTERNAL && optionsObject?.values_included) {
4787
+ Object.keys(optionsObject?.values_included)?.forEach((field) => {
4788
+ methods?.setValue(
4789
+ optionsObject?.values_included[field]?.name,
4790
+ newOption?.[field]
4791
+ );
4792
+ });
4793
+ }
4763
4794
  if (newOption) {
4764
4795
  methods.setValue(
4765
4796
  name,
4766
4797
  {
4767
- id: newOption.value,
4798
+ ...newOption,
4799
+ id: newValue,
4768
4800
  display_name: newOption?.label
4769
4801
  },
4770
4802
  { shouldDirty: true }
4771
4803
  );
4772
4804
  setTempSelectedOption(newOption);
4773
4805
  onChange && onChange(String(name), {
4774
- id: newOption?.value,
4806
+ ...newOption,
4807
+ id: newValue,
4775
4808
  display_name: newOption?.label
4776
4809
  });
4777
4810
  methods.trigger(name);
@@ -4790,14 +4823,27 @@ var many2oneFieldController = (props) => {
4790
4823
  methods.trigger(name);
4791
4824
  return;
4792
4825
  }
4793
- const newValue = selectedOption.value;
4794
- methods.setValue(
4826
+ const newValue = widget === MANY2ONE_EXTERNAL && optionsObject?.field_name ? selectedOption?.[optionsObject?.field_name] : selectedOption.value;
4827
+ if (widget === MANY2ONE_EXTERNAL && optionsObject?.values_included) {
4828
+ Object.keys(optionsObject?.values_included)?.forEach((field) => {
4829
+ methods?.setValue(
4830
+ optionsObject?.values_included[field]?.name,
4831
+ selectedOption?.[field]
4832
+ );
4833
+ });
4834
+ }
4835
+ methods?.setValue(
4795
4836
  name,
4796
- { id: newValue, display_name: selectedOption?.label },
4837
+ {
4838
+ ...selectedOption,
4839
+ id: newValue,
4840
+ display_name: selectedOption?.label
4841
+ },
4797
4842
  { shouldDirty: true }
4798
4843
  );
4799
4844
  setTempSelectedOption(selectedOption);
4800
4845
  onChange && onChange(String(name), {
4846
+ ...selectedOption,
4801
4847
  id: newValue,
4802
4848
  display_name: selectedOption.label
4803
4849
  });
@@ -4816,14 +4862,19 @@ var many2oneFieldController = (props) => {
4816
4862
  domainModal,
4817
4863
  setInputValue,
4818
4864
  allowShowDetail,
4819
- contextObject,
4865
+ contextObject: {
4866
+ ...contextObject,
4867
+ ...optionsObject?.context
4868
+ },
4820
4869
  tempSelectedOption,
4821
4870
  listOptions,
4822
4871
  fetchMoreOptions,
4823
- domainObject,
4872
+ domainObject: widget === MANY2ONE_EXTERNAL ? optionsObject?.domain : domainObject,
4824
4873
  setIsShowModalMany2Many,
4825
4874
  setDomainObject,
4826
- options: (0, utils_exports.evalJSONContext)(fieldOptions)
4875
+ options: optionsObject,
4876
+ relation: widget === MANY2ONE_EXTERNAL ? optionsObject?.model : relation,
4877
+ service: widget === MANY2ONE_EXTERNAL ? optionsObject?.service : service
4827
4878
  };
4828
4879
  };
4829
4880
 
@@ -4882,7 +4933,9 @@ var many2manyFieldController = (props) => {
4882
4933
  [false, "list"],
4883
4934
  [false, "search"]
4884
4935
  ],
4885
- context: contextObject
4936
+ context: contextObject,
4937
+ service,
4938
+ xNode: service == "wesap" && dataUser?.x_node
4886
4939
  };
4887
4940
  const { data: viewResponse } = useGetView2({
4888
4941
  viewParams,
@@ -4905,7 +4958,7 @@ var many2manyFieldController = (props) => {
4905
4958
  model: relation ?? "",
4906
4959
  viewData: viewResponse,
4907
4960
  service,
4908
- xNode: service == "wesap" && dataUser.x_node
4961
+ xNode: service == "wesap" && dataUser?.x_node
4909
4962
  });
4910
4963
  const {
4911
4964
  selectedRowKeys,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fctc/widget-logic",
3
- "version": "3.7.9",
3
+ "version": "3.8.1",
4
4
  "types": "dist/index.d.ts",
5
5
  "main": "dist/index.cjs",
6
6
  "module": "dist/index.mjs",