datastake-daf 0.6.846 → 0.6.848

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.
Files changed (42) hide show
  1. package/build/favicon.ico +0 -0
  2. package/build/logo192.png +0 -0
  3. package/build/logo512.png +0 -0
  4. package/build/manifest.json +25 -0
  5. package/build/robots.txt +3 -0
  6. package/dist/components/index.js +180 -4
  7. package/dist/hooks/index.js +4 -5
  8. package/dist/pages/index.js +1028 -866
  9. package/dist/services/index.js +11 -11
  10. package/dist/utils/index.js +14 -11
  11. package/package.json +1 -1
  12. package/src/@daf/core/components/Screens/TableScreen/StandardTablePage/index.jsx +108 -0
  13. package/src/@daf/core/components/Screens/TableScreen/TablePageWithTabs/index.jsx +9 -2
  14. package/src/@daf/core/components/TableScreen/TablePageWithTabs/index.jsx +13 -3
  15. package/src/@daf/hooks/useWidgetFetch.js +40 -34
  16. package/src/@daf/pages/Edit/index.jsx +3 -0
  17. package/src/@daf/pages/Partners/columns.js +2 -2
  18. package/src/@daf/pages/Partners/config.js +22 -0
  19. package/src/@daf/pages/Partners/hook.js +7 -11
  20. package/src/@daf/pages/Partners/index.jsx +128 -140
  21. package/src/@daf/pages/ResetPassword/index.jsx +2 -3
  22. package/src/@daf/pages/SelfAssesment/components/OrgInformationTable/columns.js +3 -2
  23. package/src/@daf/pages/TablePage/hook.js +51 -42
  24. package/src/@daf/pages/TablePage/index.jsx +95 -61
  25. package/src/@daf/{core/components/Screens → pages}/Users/columns.js +15 -10
  26. package/src/@daf/{core/components/Screens → pages}/Users/create.jsx +2 -1
  27. package/src/@daf/pages/Users/index.jsx +128 -0
  28. package/src/@daf/pages/View/hooks/useCallToGetData.js +5 -1
  29. package/src/@daf/pages/View/index.jsx +6 -3
  30. package/src/@daf/pages/hook.js +26 -7
  31. package/src/@daf/services/EventsService.js +2 -2
  32. package/src/@daf/services/MineSiteService.js +2 -2
  33. package/src/@daf/services/OperatorService.js +2 -2
  34. package/src/@daf/services/PartnerService.js +2 -2
  35. package/src/@daf/services/SourceService.js +1 -1
  36. package/src/@daf/services/WorkersService.js +2 -2
  37. package/src/@daf/utils/timeFilterUtils.js +250 -233
  38. package/src/constants/locales/fr/translation.js +14 -11
  39. package/src/index.js +1 -1
  40. package/src/pages.js +1 -1
  41. package/src/@daf/core/components/Screens/Users/index.jsx +0 -173
  42. /package/src/@daf/{core/components/Screens → pages}/Users/config.js +0 -0
@@ -7510,6 +7510,7 @@ var DashboardService$1 = createLazyService(DashboardService);
7510
7510
  // url: string
7511
7511
  // basePath: string,
7512
7512
  // }
7513
+
7513
7514
  const useWidgetFetch = ({
7514
7515
  config,
7515
7516
  getData = DashboardService$1.getWidget,
@@ -7528,7 +7529,7 @@ const useWidgetFetch = ({
7528
7529
  const {
7529
7530
  data
7530
7531
  } = await getData(rest);
7531
- setData(data);
7532
+ setData(data || defaultData);
7532
7533
  if (isErrorResponse(data)) {
7533
7534
  const errorMessage = getErrorMessage(data);
7534
7535
  antd.message.error(errorMessage);
@@ -7537,13 +7538,11 @@ const useWidgetFetch = ({
7537
7538
  onFetch();
7538
7539
  } catch (err) {
7539
7540
  console.log(err);
7540
- } finally {
7541
- setLoading(false);
7542
7541
  }
7542
+ setLoading(false);
7543
7543
  };
7544
7544
  React.useEffect(() => {
7545
7545
  if (!stop) {
7546
- console.log('fetching data');
7547
7546
  fetchData();
7548
7547
  }
7549
7548
  }, [JSON.stringify(config), stop]);
@@ -17268,11 +17267,11 @@ function SelfAssesment({
17268
17267
  }
17269
17268
 
17270
17269
  class PartnerService extends BaseService {
17271
- get(tab, filters) {
17270
+ get(params) {
17272
17271
  return this.apiGet({
17273
17272
  url: "/partner",
17274
17273
  isApp: true,
17275
- params: filters
17274
+ params
17276
17275
  });
17277
17276
  }
17278
17277
  create(data) {
@@ -17338,8 +17337,6 @@ class PartnerService extends BaseService {
17338
17337
  var PartnerService$1 = createLazyService(PartnerService);
17339
17338
 
17340
17339
  const usePartnersActions = ({
17341
- activeTab,
17342
- filters,
17343
17340
  setTotalRequests,
17344
17341
  t = () => {}
17345
17342
  }) => {
@@ -17347,15 +17344,15 @@ const usePartnersActions = ({
17347
17344
  const [data, setData] = React.useState([]);
17348
17345
  const [requestDataFetch, setRequestDataFetch] = React.useState(false);
17349
17346
  const [initFetchDone, setInitFetchDone] = React.useState(false);
17350
- const fetchData = React.useCallback(async () => {
17347
+ const fetchData = React.useCallback(async params => {
17351
17348
  setLoading(true);
17352
17349
  setData([]);
17353
17350
  try {
17354
17351
  const {
17355
17352
  data
17356
- } = await PartnerService$1.get(activeTab, {
17357
- ...filters,
17358
- type: activeTab
17353
+ } = await PartnerService$1.get({
17354
+ ...params,
17355
+ type: params?.tab
17359
17356
  });
17360
17357
  setData(data);
17361
17358
  setTotalRequests(data?.meta?.total || 0);
@@ -17366,7 +17363,7 @@ const usePartnersActions = ({
17366
17363
  if (!initFetchDone) {
17367
17364
  setInitFetchDone(true);
17368
17365
  }
17369
- }, [activeTab, filters, initFetchDone, setLoading, setTotalRequests, setData, setInitFetchDone]);
17366
+ }, [initFetchDone, setLoading, setTotalRequests, setData, setInitFetchDone]);
17370
17367
  const accept = React.useCallback(async id => {
17371
17368
  setLoading(true);
17372
17369
  try {
@@ -17412,22 +17409,20 @@ const usePartnersActions = ({
17412
17409
  setLoading(true);
17413
17410
  try {
17414
17411
  await PartnerService$1.resendInvite(id);
17415
- await fetchData();
17416
17412
  } catch (err) {
17417
17413
  console.log(err);
17418
17414
  }
17419
17415
  setLoading(false);
17420
- }, [fetchData, setLoading]);
17416
+ }, [setLoading]);
17421
17417
  const block = React.useCallback(async id => {
17422
17418
  setLoading(true);
17423
17419
  try {
17424
17420
  await PartnerService$1.block(id);
17425
- await fetchData();
17426
17421
  } catch (err) {
17427
17422
  console.log(err);
17428
17423
  }
17429
17424
  setLoading(false);
17430
- }, [fetchData, setLoading]);
17425
+ }, [setLoading]);
17431
17426
  return {
17432
17427
  loading,
17433
17428
  setLoading,
@@ -17505,20 +17500,35 @@ const filtersConfig$1 = {
17505
17500
  name: "",
17506
17501
  datastakeId: ""
17507
17502
  };
17508
- const selectFiltersConfig = {
17509
- category: {
17510
- type: "select",
17511
- label: "Category",
17512
- placeholder: t => `${t("Filter by")} ${t("Category").toLowerCase()}`,
17513
- style: {
17514
- flex: 1
17515
- },
17516
- labelStyle: {
17517
- flex: 1
17518
- },
17519
- getLabel: option => option.label,
17520
- getValue: option => option.value
17521
- }
17503
+ const getSelectFiltersConfig$1 = ({
17504
+ t
17505
+ }) => {
17506
+ return {
17507
+ category: {
17508
+ type: "select",
17509
+ label: "Category",
17510
+ placeholder: t => `${t("Filter by")} ${t("Category").toLowerCase()}`,
17511
+ style: {
17512
+ flex: 1
17513
+ },
17514
+ labelStyle: {
17515
+ flex: 1
17516
+ },
17517
+ getLabel: option => option.label,
17518
+ getValue: option => option.value
17519
+ }
17520
+ };
17521
+ };
17522
+ const getFilterOptions$e = (options, t) => {
17523
+ const {
17524
+ countries,
17525
+ category,
17526
+ categoriesOptions
17527
+ } = options || {};
17528
+ return {
17529
+ country: countries || [],
17530
+ category: categoriesOptions || category || []
17531
+ };
17522
17532
  };
17523
17533
  const checkboxConfig$1 = {
17524
17534
  name: "Name",
@@ -17556,7 +17566,8 @@ const getColumns$g = ({
17556
17566
  activate,
17557
17567
  activeTab,
17558
17568
  setOpen,
17559
- block
17569
+ block,
17570
+ options
17560
17571
  }) => [{
17561
17572
  title: t("ID"),
17562
17573
  dataIndex: "datastakeId",
@@ -17568,7 +17579,6 @@ const getColumns$g = ({
17568
17579
  className: "daf-default-cell"
17569
17580
  });
17570
17581
  }
17571
- // THE FALLBACK WAS DEPENDS BEFORE
17572
17582
  return v || "-";
17573
17583
  }
17574
17584
  }, {
@@ -17654,7 +17664,7 @@ const getColumns$g = ({
17654
17664
  className: "daf-default-cell"
17655
17665
  });
17656
17666
  }
17657
- return v ? findOptions(v, selectOptions?.category || []) : "-";
17667
+ return v ? findOptions(v, options?.categoriesOptions || []) : "-";
17658
17668
  }
17659
17669
  }, {
17660
17670
  title: /*#__PURE__*/jsxRuntime.jsxs("div", {
@@ -18532,6 +18542,7 @@ const TablePageWithTabs = ({
18532
18542
  tabs = [],
18533
18543
  headerTooltip,
18534
18544
  drawerTooltip,
18545
+ externalOpenDrawer = false,
18535
18546
  children
18536
18547
  }) => {
18537
18548
  const params = new URLSearchParams(location?.search);
@@ -18544,6 +18555,11 @@ const TablePageWithTabs = ({
18544
18555
  React.useEffect(() => {
18545
18556
  getActiveTabRef.current(activeTab);
18546
18557
  }, [activeTab]);
18558
+ React.useEffect(() => {
18559
+ if (externalOpenDrawer) {
18560
+ setOpenCreateModal(true);
18561
+ }
18562
+ }, [externalOpenDrawer]);
18547
18563
  return /*#__PURE__*/jsxRuntime.jsxs("div", {
18548
18564
  className: "semibold form-input-output daf-create-view",
18549
18565
  children: [/*#__PURE__*/jsxRuntime.jsx(DAFHeader, {
@@ -18586,7 +18602,7 @@ const TablePageWithTabs = ({
18586
18602
  checkboxConfig: checkboxConfig,
18587
18603
  defaultTableFilters: {},
18588
18604
  columns: columns,
18589
- data: data?.data,
18605
+ data: Array.isArray(data?.data) ? data : data?.data,
18590
18606
  loading: loading,
18591
18607
  location: location,
18592
18608
  goTo: goTo,
@@ -18620,6 +18636,116 @@ const TablePageWithTabs = ({
18620
18636
  });
18621
18637
  };
18622
18638
 
18639
+ const StandardTablePage = ({
18640
+ t = () => {},
18641
+ title,
18642
+ breadCrumbs,
18643
+ location,
18644
+ loading = false,
18645
+ goTo = () => {},
18646
+ checkboxConfig = {},
18647
+ columns = [],
18648
+ data = {},
18649
+ APP,
18650
+ getApiBaseUrl = () => {},
18651
+ selectOptions = {},
18652
+ selectFiltersConfig = {},
18653
+ getRedirectLink = () => {},
18654
+ filtersConfig = {},
18655
+ isMobile,
18656
+ view,
18657
+ onDownload,
18658
+ downloadDisabled = false,
18659
+ drawerTitle = "",
18660
+ onCreateModalClose = () => {},
18661
+ headerTooltip,
18662
+ drawerTooltip,
18663
+ externalOpenDrawer = false,
18664
+ children
18665
+ }) => {
18666
+ const params = new URLSearchParams(location?.search);
18667
+ const [openCreateModal, setOpenCreateModal] = React.useState(params.has("create"));
18668
+ React.useEffect(() => {
18669
+ if (externalOpenDrawer) {
18670
+ setOpenCreateModal(true);
18671
+ }
18672
+ }, [externalOpenDrawer]);
18673
+ console.log({
18674
+ openCreateModal,
18675
+ externalOpenDrawer
18676
+ });
18677
+ return /*#__PURE__*/jsxRuntime.jsxs("div", {
18678
+ className: "semibold form-input-output daf-create-view",
18679
+ children: [/*#__PURE__*/jsxRuntime.jsx(DAFHeader, {
18680
+ title: t(title),
18681
+ breadcrumbs: breadCrumbs,
18682
+ actionButtons: [{
18683
+ type: "primary",
18684
+ onClick: () => setOpenCreateModal(true),
18685
+ tooltip: t("New"),
18686
+ icon: "Add"
18687
+ }],
18688
+ onDownload: onDownload && typeof onDownload === 'function' ? onDownload : undefined,
18689
+ downloadDisabled: downloadDisabled,
18690
+ tooltip: headerTooltip
18691
+ }), /*#__PURE__*/jsxRuntime.jsx(BaseScreen, {
18692
+ t: t,
18693
+ checkboxConfig: checkboxConfig,
18694
+ defaultTableFilters: {},
18695
+ columns: columns,
18696
+ data: Array.isArray(data?.data) ? data : data?.data,
18697
+ loading: loading,
18698
+ location: location,
18699
+ goTo: goTo,
18700
+ APP: APP,
18701
+ getApiBaseUrl: getApiBaseUrl,
18702
+ selectOptions: selectOptions,
18703
+ selectFilters: selectFiltersConfig,
18704
+ view: view,
18705
+ getRedirectLink: getRedirectLink,
18706
+ defaultUrlParams: {},
18707
+ module: APP,
18708
+ filtersConfig: filtersConfig,
18709
+ isMobile: isMobile
18710
+ }), openCreateModal && /*#__PURE__*/jsxRuntime.jsx(antd.Drawer, {
18711
+ destroyOnHidden: true,
18712
+ title: /*#__PURE__*/jsxRuntime.jsx(DrawerHeader, {
18713
+ title: t(drawerTitle)
18714
+ }),
18715
+ tooltip: drawerTooltip,
18716
+ open: openCreateModal,
18717
+ onClose: () => setOpenCreateModal(false),
18718
+ width: CREATE_DRAWER_WIDTH,
18719
+ bodyStyle: {
18720
+ padding: 0
18721
+ },
18722
+ children: typeof children === 'function' ? children({
18723
+ onDrawerClose: () => setOpenCreateModal(false),
18724
+ open: openCreateModal
18725
+ }) : children
18726
+ })]
18727
+ });
18728
+ };
18729
+
18730
+ /**
18731
+ * Enum for message types used with Ant Design message component
18732
+ * @enum {string}
18733
+ */
18734
+ const MessageTypes = {
18735
+ SUCCESS: 'success',
18736
+ ERROR: 'error',
18737
+ WARNING: 'warning'
18738
+ };
18739
+
18740
+ /**
18741
+ * Displays a notification message using Ant Design's message component
18742
+ * @param {string} type - The type of message (success, error, warning)
18743
+ * @param {string} m - The message content to display
18744
+ */
18745
+ function displayMessage(type, m) {
18746
+ antd.message[type](m);
18747
+ }
18748
+
18623
18749
  const countriesPhoneNumberLength = {
18624
18750
  AD: 6,
18625
18751
  AE: 9,
@@ -40506,159 +40632,111 @@ function DynamicForm({
40506
40632
  });
40507
40633
  }
40508
40634
 
40509
- const data = {};
40510
40635
  const Create$1 = ({
40636
+ namespace,
40637
+ view,
40638
+ edit = false,
40639
+ formData = {},
40640
+ loading = false,
40641
+ onSubmitted = () => {},
40642
+ onCancel = () => {},
40643
+ getData = () => {},
40644
+ saveData = () => {},
40645
+ form: formConfig = {},
40646
+ formValue = {},
40647
+ defaultData = {},
40648
+ user = {},
40649
+ APP,
40511
40650
  query,
40512
40651
  goTo = () => {},
40513
- user,
40514
40652
  t = () => {},
40515
- ajaxForms,
40653
+ ajaxForms = {},
40516
40654
  changeAjaxForms = () => {},
40517
- ajaxOptions,
40655
+ ajaxOptions = {},
40518
40656
  changeAjaxOptions = () => {},
40519
- onClose = () => {},
40520
- fetchData = () => {},
40521
- APP,
40522
40657
  getAppHeader = () => {},
40523
- getApiBaseUrl = () => {}
40658
+ getApiBaseUrl = () => {},
40659
+ scope,
40660
+ formType
40524
40661
  }) => {
40525
- const partnerTypes = React.useMemo(() => getPartnerTypes(t), [t]);
40526
- const partnershipTypes = React.useMemo(() => getPartnershipTypes(t), [t]);
40527
- const form = React.useMemo(() => ({
40528
- identification: {
40529
- partnershipType: {
40530
- label: t("Type of partnership"),
40531
- type: "select",
40532
- position: 1,
40533
- dataId: "partnershipType",
40534
- tooltip: /*#__PURE__*/jsxRuntime.jsxs("div", {
40535
- style: {
40536
- maxWidth: 296
40537
- },
40538
- children: [t("Source: This partner will share information with you."), /*#__PURE__*/jsxRuntime.jsx("br", {}), t("Client: You will share information with this partner."), /*#__PURE__*/jsxRuntime.jsx("br", {}), t("Exchange: You will both share information with each other.")]
40539
- }),
40540
- options: partnershipTypes.map(o => ({
40541
- ...o,
40542
- label: t(o.label)
40543
- })),
40544
- rules: [{
40545
- required: true,
40546
- message: "errors::field is required"
40547
- }]
40548
- },
40549
- partnerType: {
40550
- label: t("Type of partner"),
40551
- type: "select",
40552
- position: 2,
40553
- dataId: "partnerType",
40554
- options: partnerTypes.map(o => ({
40555
- ...o,
40556
- label: t(o.label)
40557
- })),
40558
- rules: [{
40559
- required: true,
40560
- message: "errors::field is required"
40561
- }]
40562
- },
40563
- nickName: {
40564
- label: {
40565
- "partnerType is individual": t("Person name"),
40566
- "partnerType is organisation": t("Organisation name")
40567
- },
40568
- type: "text",
40569
- position: 3,
40570
- showIf: "partnerType notEmpty true",
40571
- dataId: "nickName",
40572
- rules: [{
40573
- required: true,
40574
- message: "errors::field is required"
40575
- }]
40576
- },
40577
- invitationType: {
40578
- label: t("Invitation type"),
40579
- type: "select",
40580
- position: 3,
40581
- dataId: "invitationType",
40582
- options: [{
40583
- label: "Email",
40584
- value: "email"
40585
- }, {
40586
- label: "Application ID",
40587
- value: "id"
40588
- }],
40589
- rules: [{
40590
- required: true,
40591
- message: "errors::field is required"
40592
- }]
40593
- },
40594
- email: {
40595
- label: t("Email"),
40596
- type: "text",
40597
- position: 4,
40598
- showIf: "invitationType is email",
40599
- dataId: "email",
40600
- rules: [{
40601
- required: true,
40602
- message: "errors::field is required"
40603
- }, {
40604
- type: "email",
40605
- message: "errors::field must be email"
40606
- }]
40662
+ let {
40663
+ form = {},
40664
+ data = defaultData || {}
40665
+ } = !edit ? formData[`${APP}-${view}`] || {} : {
40666
+ form: formConfig,
40667
+ data: formValue
40668
+ };
40669
+ const language = React.useMemo(() => user?.language, [user?.language]);
40670
+ React.useEffect(() => {
40671
+ if (!edit) {
40672
+ getData({
40673
+ namespace,
40674
+ module: APP,
40675
+ view,
40676
+ scope
40677
+ });
40678
+ } else {
40679
+ form = formConfig;
40680
+ data = formValue;
40681
+ }
40682
+ }, [edit, language, scope, namespace, APP, view]);
40683
+ return /*#__PURE__*/jsxRuntime.jsx("div", {
40684
+ className: "daf-create-form",
40685
+ children: /*#__PURE__*/jsxRuntime.jsx(DynamicForm, {
40686
+ form: form,
40687
+ data: {
40688
+ ...defaultData,
40689
+ ...data
40607
40690
  },
40608
- datastakeId: {
40609
- label: t("Application ID"),
40610
- type: "text",
40611
- position: 4,
40612
- showIf: "invitationType is id",
40613
- dataId: "datastakeId",
40614
- rules: [{
40615
- required: true,
40616
- message: "errors::field is required"
40617
- }]
40691
+ showSaveAndNext: false,
40692
+ module: APP,
40693
+ onCancel: onCancel,
40694
+ isCreate: true,
40695
+ t: t,
40696
+ excludedKeys: ["title"],
40697
+ user: user,
40698
+ ajaxForms: ajaxForms,
40699
+ ajaxOptions: ajaxOptions,
40700
+ getAppHeader: getAppHeader,
40701
+ getApiBaseUrl: getApiBaseUrl,
40702
+ changeAjaxOptions: changeAjaxOptions,
40703
+ app: APP,
40704
+ query: query,
40705
+ goTo: goTo,
40706
+ changeAjaxForms: changeAjaxForms,
40707
+ submit: (payload, setSelectedFormNext) => {
40708
+ const payloadData = {
40709
+ ...payload,
40710
+ module: APP,
40711
+ namespace
40712
+ };
40713
+ const newPayload = {
40714
+ ...defaultData,
40715
+ ...payloadData,
40716
+ form: formType
40717
+ };
40718
+ const {
40719
+ datastakeId,
40720
+ ...finalPayload
40721
+ } = newPayload;
40722
+ const callback = (type, m, data) => {
40723
+ if (setSelectedFormNext) {
40724
+ setSelectedFormNext();
40725
+ }
40726
+ if (type === MessageTypes.SUCCESS) {
40727
+ if (onSubmitted) onSubmitted(type, m, data);
40728
+ } else {
40729
+ antd.message.error(m);
40730
+ }
40731
+ };
40732
+ saveData(!data && !data.id ? finalPayload : Object.assign(finalPayload, {
40733
+ id: data.id
40734
+ }), callback);
40618
40735
  },
40619
- partnerMessage: {
40620
- type: "message",
40621
- position: 4,
40622
- label: t("If the user you are inviting is part of an existing organisation, the invitation will be shared with the account administrator of that organisation."),
40623
- showIf: "partnerType is individual",
40624
- dataId: "partnerMessage"
40736
+ isFormDisabled: () => {
40737
+ return !data || !data.typeOfEvent;
40625
40738
  }
40626
- }
40627
- }), [t]);
40628
- const submit = async data => {
40629
- try {
40630
- const {
40631
- form,
40632
- ...rest
40633
- } = data;
40634
- await PartnerService$1.create(rest);
40635
- fetchData();
40636
- onClose();
40637
- } catch (err) {
40638
- onClose();
40639
- antd.message.error(t(err?.response?.data?.message || "Error occured"));
40640
- console.log(err);
40641
- }
40642
- };
40643
- return /*#__PURE__*/jsxRuntime.jsx(DynamicForm, {
40644
- form: form,
40645
- data: data,
40646
- showSaveAndNext: false,
40647
- module: APP,
40648
- t: t,
40649
- isCreate: true,
40650
- user: user,
40651
- ajaxForms: ajaxForms,
40652
- ajaxOptions: ajaxOptions,
40653
- getAppHeader: getAppHeader,
40654
- getApiBaseUrl: getApiBaseUrl,
40655
- changeAjaxOptions: changeAjaxOptions,
40656
- app: APP,
40657
- query: query,
40658
- goTo: () => {},
40659
- changeAjaxForms: changeAjaxForms,
40660
- onCancel: onClose,
40661
- submit: submit
40739
+ })
40662
40740
  });
40663
40741
  };
40664
40742
 
@@ -40708,483 +40786,6 @@ const useGetQueryParams = ({
40708
40786
  return params;
40709
40787
  };
40710
40788
 
40711
- const Style$3 = styled__default["default"].div`
40712
- display: flex;
40713
- gap: 8px;
40714
- justify-content: center;
40715
- margin-top: var(--size-lg);
40716
-
40717
- &.mt-0 {
40718
- margin-top: 0;
40719
- }
40720
-
40721
- .ant-btn {
40722
- width: 75px;
40723
- }
40724
- `;
40725
- function Footer({
40726
- onClose = () => {},
40727
- onSubmit = () => {},
40728
- t = s => s,
40729
- loading,
40730
- className,
40731
- disabledFooterText,
40732
- disabledFooter
40733
- }) {
40734
- return /*#__PURE__*/jsxRuntime.jsxs(Style$3, {
40735
- className: className,
40736
- children: [disabledFooterText ? /*#__PURE__*/jsxRuntime.jsx(antd.Tooltip, {
40737
- title: t(disabledFooterText),
40738
- children: /*#__PURE__*/jsxRuntime.jsx(antd.Button, {
40739
- type: "primary",
40740
- onClick: onSubmit,
40741
- disabled: true,
40742
- children: t(loading ? 'Loading...' : 'Save')
40743
- })
40744
- }) : /*#__PURE__*/jsxRuntime.jsx(antd.Button, {
40745
- type: "primary",
40746
- onClick: onSubmit,
40747
- disabled: disabledFooter,
40748
- children: t(loading ? 'Loading...' : 'Save')
40749
- }), /*#__PURE__*/jsxRuntime.jsx(antd.Button, {
40750
- onClick: onClose,
40751
- children: t('Cancel')
40752
- })]
40753
- });
40754
- }
40755
-
40756
- const licensingOptions = [{
40757
- label: 'Open without citation',
40758
- value: 'no_citation'
40759
- }, {
40760
- label: 'Open with citation',
40761
- value: 'citation'
40762
- }, {
40763
- label: 'Conditional re-use',
40764
- value: 'conditional',
40765
- disabled: true
40766
- }, {
40767
- label: 'Private use',
40768
- value: 'private'
40769
- }];
40770
-
40771
- const Edit$1 = ({
40772
- partner,
40773
- onClose = () => {},
40774
- fetchData = () => {},
40775
- t = () => {}
40776
- }) => {
40777
- const [MainForm] = antd.Form.useForm();
40778
- const [loading, setLoading] = React.useState(false);
40779
- React.useMemo(() => getPartnerTypes(t), [t]);
40780
- const partnershipTypes = React.useMemo(() => getPartnershipTypes(t), [t]);
40781
- React.useEffect(() => {
40782
- MainForm.setFieldsValue({
40783
- ...partner,
40784
- licensing: 'no_citation'
40785
- });
40786
- }, [partner]);
40787
- const onSubmit = async () => {
40788
- setLoading(true);
40789
- try {
40790
- const val = await MainForm.validateFields();
40791
- await PartnerService$1.update(partner.id, val);
40792
- onClose();
40793
- fetchData();
40794
- } catch (err) {
40795
- console.log(err);
40796
- }
40797
- setLoading(false);
40798
- };
40799
- return /*#__PURE__*/jsxRuntime.jsxs("div", {
40800
- children: [loading ? /*#__PURE__*/jsxRuntime.jsx(Loading, {}) : null, /*#__PURE__*/jsxRuntime.jsxs(antd.Form, {
40801
- form: MainForm,
40802
- layout: "vertical",
40803
- children: [/*#__PURE__*/jsxRuntime.jsx(antd.Form.Item, {
40804
- required: true,
40805
- name: "nickName",
40806
- rules: [{
40807
- required: true
40808
- }],
40809
- label: t('Name'),
40810
- children: /*#__PURE__*/jsxRuntime.jsx(antd.Input, {
40811
- name: "name"
40812
- })
40813
- }), /*#__PURE__*/jsxRuntime.jsx(antd.Form.Item, {
40814
- required: true,
40815
- name: "partnershipType",
40816
- label: t('Partner Type'),
40817
- children: /*#__PURE__*/jsxRuntime.jsx(antd.Select, {
40818
- children: partnershipTypes.map(type => /*#__PURE__*/jsxRuntime.jsx(antd.Select.Option, {
40819
- value: type.value,
40820
- children: type.label
40821
- }, type.value))
40822
- })
40823
- }), /*#__PURE__*/jsxRuntime.jsx(antd.Form.Item, {
40824
- required: true,
40825
- name: "email",
40826
- label: t('Email address'),
40827
- rules: [{
40828
- type: 'email',
40829
- required: true
40830
- }],
40831
- children: /*#__PURE__*/jsxRuntime.jsx(antd.Input, {
40832
- disabled: true
40833
- })
40834
- }), /*#__PURE__*/jsxRuntime.jsx(antd.Form.Item, {
40835
- required: true,
40836
- name: "licensing",
40837
- label: t('Licensing'),
40838
- children: /*#__PURE__*/jsxRuntime.jsx(antd.Select, {
40839
- disabled: true,
40840
- children: licensingOptions.map(option => /*#__PURE__*/jsxRuntime.jsx(antd.Select.Option, {
40841
- value: option.value,
40842
- children: t(option.label)
40843
- }, option.value))
40844
- })
40845
- })]
40846
- }), /*#__PURE__*/jsxRuntime.jsx(Footer, {
40847
- t: t,
40848
- loading: loading,
40849
- onClose: onClose,
40850
- onSubmit: onSubmit
40851
- })]
40852
- });
40853
- };
40854
-
40855
- const PartnersTable = ({
40856
- t = () => {},
40857
- goTo = () => {},
40858
- user = {},
40859
- options = {},
40860
- getRedirectLink = () => {},
40861
- theme = {},
40862
- isMobile,
40863
- APP,
40864
- location,
40865
- breadcrumbs = [],
40866
- getApiBaseUrl = () => {},
40867
- getAppHeader = () => {},
40868
- query = {},
40869
- ajaxForms = {},
40870
- changeAjaxForms = () => {},
40871
- ajaxOptions = {},
40872
- changeAjaxOptions = () => {},
40873
- applications = [],
40874
- extendingFilters = {},
40875
- searchLocationParams
40876
- }) => {
40877
- const [totalRequests, setTotalRequests] = React.useState(0);
40878
- const [selectOptions, setSelectOptions] = React.useState();
40879
- const [activeTab, setActiveTab] = React.useState();
40880
- const [pendingEditId, setPendingEditId] = React.useState(null);
40881
- const [openModal, setOpenModal] = React.useState(false);
40882
- const tabs = React.useMemo(() => [{
40883
- label: t("List"),
40884
- key: "partners"
40885
- }, {
40886
- label: /*#__PURE__*/jsxRuntime.jsxs("div", {
40887
- className: "tab-cont",
40888
- children: [/*#__PURE__*/jsxRuntime.jsx("div", {
40889
- className: "flex flex-column justify-content-center",
40890
- children: t('Requests')
40891
- }), typeof totalRequests === 'number' ? /*#__PURE__*/jsxRuntime.jsx("div", {
40892
- className: "flex flex-column justify-content-center",
40893
- children: /*#__PURE__*/jsxRuntime.jsx("div", {
40894
- className: "bubble",
40895
- children: /*#__PURE__*/jsxRuntime.jsx("div", {
40896
- className: "flex flex-column justify-content-center",
40897
- children: totalRequests
40898
- })
40899
- })
40900
- }) : null]
40901
- }),
40902
- key: "requests"
40903
- }], [t, totalRequests]);
40904
- const {
40905
- paginationQuery,
40906
- searchParams,
40907
- otherParams,
40908
- sortBy,
40909
- sortDir
40910
- } = useGetQueryParams({
40911
- location
40912
- });
40913
- const filters = React.useMemo(() => {
40914
- const cleanSearchParams = Object.fromEntries(Object.entries(searchParams).filter(([_, value]) => value != null && value !== ''));
40915
- return {
40916
- pagination: paginationQuery,
40917
- ...(Object.keys(otherParams).length > 0 && otherParams),
40918
- ...(Object.keys(cleanSearchParams).length > 0 && {
40919
- search: cleanSearchParams
40920
- }),
40921
- tab: activeTab,
40922
- sortBy: {
40923
- [sortBy || "updatedAt"]: sortDir ? sortDir === "ascend" ? 1 : -1 : -1
40924
- },
40925
- ...extendingFilters
40926
- };
40927
- }, [location.search, activeTab, JSON.stringify(extendingFilters)]);
40928
- const {
40929
- loading,
40930
- data,
40931
- requestDataFetch,
40932
- fetchData,
40933
- accept,
40934
- decline,
40935
- activate,
40936
- suspend,
40937
- resendInvite,
40938
- block,
40939
- setRequestDataFetch,
40940
- initFetchDone,
40941
- setInitFetchDone
40942
- } = usePartnersActions({
40943
- activeTab,
40944
- filters,
40945
- setTotalRequests,
40946
- t
40947
- });
40948
- const columns = React.useMemo(() => getColumns$g({
40949
- t,
40950
- accept,
40951
- decline,
40952
- suspend,
40953
- resendInvite,
40954
- activate,
40955
- activeTab,
40956
- selectOptions,
40957
- block,
40958
- setOpen: setOpenModal
40959
- }), [t, accept, decline, suspend, resendInvite, activate, activeTab, selectOptions, block, setOpenModal]);
40960
- const handleActiveTabChange = React.useCallback(value => {
40961
- setActiveTab(value);
40962
- }, []);
40963
- React.useEffect(() => {
40964
- if (requestDataFetch) {
40965
- fetchData();
40966
- setRequestDataFetch(false);
40967
- }
40968
- }, [requestDataFetch, fetchData, setRequestDataFetch]);
40969
- React.useEffect(() => {
40970
- if (searchLocationParams.has("datastakeId") && !pendingEditId) {
40971
- setPendingEditId(searchLocationParams.get("datastakeId"));
40972
- }
40973
- }, [searchLocationParams, pendingEditId]);
40974
- React.useEffect(() => {
40975
- if (pendingEditId) {
40976
- const partner = data.find(partner => partner.datastakeId === pendingEditId);
40977
- if (partner) {
40978
- setOpenModal(partner);
40979
- setPendingEditId(null);
40980
- }
40981
- }
40982
- }, [data, pendingEditId]);
40983
- React.useEffect(() => {
40984
- fetchData();
40985
- }, [filters]);
40986
- const headerTooltip = React.useMemo(() => ({
40987
- title: t("Partners"),
40988
- content: /*#__PURE__*/jsxRuntime.jsxs("div", {
40989
- className: "max-w-250",
40990
- children: [t("Partners are organisations sharing their information with you, or receiving your information."), /*#__PURE__*/jsxRuntime.jsx("br", {}), t("Only authorised users can create partnerships.")]
40991
- })
40992
- }), [t]);
40993
- const drawerTooltip = React.useMemo(() => ({
40994
- content: /*#__PURE__*/jsxRuntime.jsxs("div", {
40995
- className: "max-w-250",
40996
- children: [t("Source: This partner will share information with you."), ",", /*#__PURE__*/jsxRuntime.jsx("br", {}), t("Client: You will share information with this partner."), ",", /*#__PURE__*/jsxRuntime.jsx("br", {}), t("Exchange: You will both share information with each other.")]
40997
- })
40998
- }), [t]);
40999
- return /*#__PURE__*/jsxRuntime.jsxs(jsxRuntime.Fragment, {
41000
- children: [/*#__PURE__*/jsxRuntime.jsx(TablePageWithTabs, {
41001
- t: t,
41002
- tabs: tabs,
41003
- title: t("Partners"),
41004
- breadCrumbs: breadcrumbs,
41005
- location: location,
41006
- loading: loading,
41007
- goTo: goTo,
41008
- defaultActiveTab: "partners",
41009
- columns: columns,
41010
- data: data,
41011
- checkboxConfig: checkboxConfig$1,
41012
- APP: APP,
41013
- getApiBaseUrl: getApiBaseUrl,
41014
- selectOptions: selectOptions,
41015
- selectFiltersConfig: selectFiltersConfig,
41016
- getRedirectLink: getRedirectLink,
41017
- filtersConfig: filtersConfig$1,
41018
- isMobile: isMobile,
41019
- view: "partners",
41020
- getActiveTab: handleActiveTabChange,
41021
- headerTooltip: headerTooltip,
41022
- drawerTitle: t("Create Partner"),
41023
- drawerTooltip: drawerTooltip,
41024
- children: ({
41025
- onDrawerClose
41026
- }) => /*#__PURE__*/jsxRuntime.jsx(Create$1, {
41027
- query: query,
41028
- goTo: goTo,
41029
- user: user,
41030
- t: t,
41031
- ajaxForms: ajaxForms,
41032
- changeAjaxForms: changeAjaxForms,
41033
- ajaxOptions: ajaxOptions,
41034
- changeAjaxOptions: changeAjaxOptions,
41035
- onClose: onDrawerClose,
41036
- fetchData: () => setRequestDataFetch(true),
41037
- APP: APP,
41038
- getAppHeader: getAppHeader,
41039
- getApiBaseUrl: getApiBaseUrl
41040
- })
41041
- }), /*#__PURE__*/jsxRuntime.jsx(antd.Modal, {
41042
- open: !!openModal,
41043
- onCancel: () => setOpenModal(false),
41044
- footer: null,
41045
- title: /*#__PURE__*/jsxRuntime.jsx(ModalHeader, {
41046
- title: t("Edit Settings")
41047
- }),
41048
- children: openModal ? /*#__PURE__*/jsxRuntime.jsx(Edit$1, {
41049
- partner: openModal,
41050
- fetchData: () => setRequestDataFetch(true),
41051
- onClose: () => setOpenModal(false),
41052
- t: t
41053
- }) : null
41054
- }), /*#__PURE__*/jsxRuntime.jsx("input", {
41055
- id: "myInput",
41056
- hidden: true
41057
- })]
41058
- });
41059
- };
41060
-
41061
- /**
41062
- * Enum for message types used with Ant Design message component
41063
- * @enum {string}
41064
- */
41065
- const MessageTypes = {
41066
- SUCCESS: 'success',
41067
- ERROR: 'error',
41068
- WARNING: 'warning'
41069
- };
41070
-
41071
- /**
41072
- * Displays a notification message using Ant Design's message component
41073
- * @param {string} type - The type of message (success, error, warning)
41074
- * @param {string} m - The message content to display
41075
- */
41076
- function displayMessage(type, m) {
41077
- antd.message[type](m);
41078
- }
41079
-
41080
- const Create = ({
41081
- namespace,
41082
- view,
41083
- edit = false,
41084
- formData = {},
41085
- loading = false,
41086
- onSubmitted = () => {},
41087
- onCancel = () => {},
41088
- getData = () => {},
41089
- saveData = () => {},
41090
- form: formConfig = {},
41091
- formValue = {},
41092
- defaultData = {},
41093
- user = {},
41094
- APP,
41095
- query,
41096
- goTo = () => {},
41097
- t = () => {},
41098
- ajaxForms = {},
41099
- changeAjaxForms = () => {},
41100
- ajaxOptions = {},
41101
- changeAjaxOptions = () => {},
41102
- getAppHeader = () => {},
41103
- getApiBaseUrl = () => {},
41104
- scope,
41105
- formType
41106
- }) => {
41107
- let {
41108
- form = {},
41109
- data = defaultData || {}
41110
- } = !edit ? formData[`${APP}-${view}`] || {} : {
41111
- form: formConfig,
41112
- data: formValue
41113
- };
41114
- const language = React.useMemo(() => user?.language, [user?.language]);
41115
- React.useEffect(() => {
41116
- if (!edit) {
41117
- getData({
41118
- namespace,
41119
- module: APP,
41120
- view,
41121
- scope
41122
- });
41123
- } else {
41124
- form = formConfig;
41125
- data = formValue;
41126
- }
41127
- }, [edit, language, scope, namespace, APP, view]);
41128
- return /*#__PURE__*/jsxRuntime.jsx("div", {
41129
- className: "daf-create-form",
41130
- children: /*#__PURE__*/jsxRuntime.jsx(DynamicForm, {
41131
- form: form,
41132
- data: {
41133
- ...defaultData,
41134
- ...data
41135
- },
41136
- showSaveAndNext: false,
41137
- module: APP,
41138
- onCancel: onCancel,
41139
- isCreate: true,
41140
- t: t,
41141
- excludedKeys: ["title"],
41142
- user: user,
41143
- ajaxForms: ajaxForms,
41144
- ajaxOptions: ajaxOptions,
41145
- getAppHeader: getAppHeader,
41146
- getApiBaseUrl: getApiBaseUrl,
41147
- changeAjaxOptions: changeAjaxOptions,
41148
- app: APP,
41149
- query: query,
41150
- goTo: goTo,
41151
- changeAjaxForms: changeAjaxForms,
41152
- submit: (payload, setSelectedFormNext) => {
41153
- const payloadData = {
41154
- ...payload,
41155
- module: APP,
41156
- namespace
41157
- };
41158
- const newPayload = {
41159
- ...defaultData,
41160
- ...payloadData,
41161
- form: formType
41162
- };
41163
- const {
41164
- datastakeId,
41165
- ...finalPayload
41166
- } = newPayload;
41167
- const callback = (type, m, data) => {
41168
- if (setSelectedFormNext) {
41169
- setSelectedFormNext();
41170
- }
41171
- if (type === MessageTypes.SUCCESS) {
41172
- if (onSubmitted) onSubmitted(type, m, data);
41173
- } else {
41174
- antd.message.error(m);
41175
- }
41176
- };
41177
- saveData(!data && !data.id ? finalPayload : Object.assign(finalPayload, {
41178
- id: data.id
41179
- }), callback);
41180
- },
41181
- isFormDisabled: () => {
41182
- return !data || !data.typeOfEvent;
41183
- }
41184
- })
41185
- });
41186
- };
41187
-
41188
40789
  const getFiltersConfig$d = ({
41189
40790
  t
41190
40791
  }) => {
@@ -45581,7 +45182,8 @@ const useFetchData = ({
45581
45182
  getData,
45582
45183
  activeTab,
45583
45184
  extendingFilters,
45584
- subject
45185
+ subject,
45186
+ refetchTrigger
45585
45187
  }) => {
45586
45188
  const {
45587
45189
  paginationQuery,
@@ -45608,19 +45210,71 @@ const useFetchData = ({
45608
45210
  ...(Object.keys(cleanSearchParams).length > 0 && {
45609
45211
  search: cleanSearchParams
45610
45212
  }),
45611
- tab: activeTab,
45213
+ ...(activeTab && {
45214
+ tab: activeTab
45215
+ }),
45612
45216
  sortBy: {
45613
45217
  [sortBy || extendingSortKey || "updatedAt"]: sortDir ? sortDir === "ascend" ? 1 : -1 : extendingSortDir || -1
45614
45218
  }
45615
45219
  };
45616
45220
  const currentParamsString = JSON.stringify(currentParams);
45617
- if (prevParamsRef.current === currentParamsString) {
45221
+ const paramsChanged = prevParamsRef.current !== currentParamsString;
45222
+ const shouldFetch = paramsChanged || refetchTrigger;
45223
+ if (!shouldFetch) {
45618
45224
  return;
45619
45225
  }
45620
45226
  prevParamsRef.current = currentParamsString;
45621
45227
  getData(currentParams, subject);
45622
- }, [location.search, JSON.stringify(extendingFilters), activeTab]);
45623
- };
45228
+ }, [location.search, JSON.stringify(extendingFilters), activeTab, refetchTrigger]);
45229
+ };
45230
+
45231
+ // export const useFetchData = ({
45232
+ // location,
45233
+ // getData,
45234
+ // activeTab,
45235
+ // extendingFilters,
45236
+ // subject,
45237
+ // }) => {
45238
+ // const { paginationQuery, searchParams, otherParams, sortBy, sortDir, } = useGetQueryParams({location});
45239
+
45240
+ // const prevParamsRef = useRef();
45241
+
45242
+ // useEffect(() => {
45243
+ // const cleanSearchParams = Object.fromEntries(
45244
+ // Object.entries(searchParams).filter(([_, value]) => value != null && value !== '')
45245
+ // );
45246
+
45247
+ // const hasPagination = paginationQuery.skip != null || paginationQuery.take != null;
45248
+
45249
+ // if (!hasPagination) {
45250
+ // return;
45251
+ // }
45252
+
45253
+ // const extendingSortKey = extendingFilters?.sortBy ? Object.keys(extendingFilters.sortBy)[0] : null;
45254
+ // const extendingSortDir = extendingFilters?.sortBy && extendingSortKey ? extendingFilters.sortBy[extendingSortKey] : null;
45255
+
45256
+ // const currentParams = {
45257
+ // ...extendingFilters,
45258
+ // pagination: paginationQuery,
45259
+ // ...(Object.keys(otherParams).length > 0 && otherParams ),
45260
+ // ...(Object.keys(cleanSearchParams).length > 0 && { search: cleanSearchParams }),
45261
+ // tab: activeTab,
45262
+ // sortBy: {
45263
+ // [sortBy || extendingSortKey || "updatedAt"]: sortDir ? (sortDir === "ascend" ? 1 : -1) : (extendingSortDir || -1),
45264
+ // },
45265
+ // };
45266
+
45267
+ // const currentParamsString = JSON.stringify(currentParams);
45268
+ // if (prevParamsRef.current === currentParamsString) {
45269
+ // return;
45270
+ // }
45271
+
45272
+ // prevParamsRef.current = currentParamsString;
45273
+
45274
+ // getData(currentParams, subject);
45275
+ // }, [location.search, JSON.stringify(extendingFilters), activeTab]);
45276
+ // }
45277
+
45624
45278
  const useTablePage = ({
45625
45279
  subject,
45626
45280
  location,
@@ -45635,16 +45289,21 @@ const useTablePage = ({
45635
45289
  data,
45636
45290
  applications,
45637
45291
  subjectClear,
45638
- APP
45292
+ APP,
45293
+ defaultActiveTab = "own",
45294
+ getActiveTab,
45295
+ refetchTrigger,
45296
+ noTabs = false
45639
45297
  }) => {
45640
45298
  const [selectOptions, setSelectOptions] = React.useState();
45641
- const [activeTab, setActiveTab] = React.useState("own");
45299
+ const [activeTab, setActiveTab] = React.useState(noTabs ? null : defaultActiveTab);
45642
45300
  useFetchData({
45643
45301
  location,
45644
45302
  getData,
45645
45303
  activeTab,
45646
45304
  extendingFilters: extendingFilters,
45647
- subject
45305
+ subject,
45306
+ refetchTrigger
45648
45307
  });
45649
45308
  const columns = React.useMemo(() => getColumns$3({
45650
45309
  t,
@@ -45689,6 +45348,9 @@ const useTablePage = ({
45689
45348
  }), [subject, getViewConfig]);
45690
45349
  const handleActiveTabChange = React.useCallback(value => {
45691
45350
  setActiveTab(value);
45351
+ if (getActiveTab && typeof getActiveTab === 'function' && !noTabs) {
45352
+ getActiveTab(value);
45353
+ }
45692
45354
  }, []);
45693
45355
  React.useEffect(() => () => {
45694
45356
  if (subjectClear && typeof subjectClear === 'function') {
@@ -45743,7 +45405,19 @@ const TablePage = ({
45743
45405
  subjectClear,
45744
45406
  subject,
45745
45407
  breadcrumbs = [],
45746
- onDownload
45408
+ onDownload,
45409
+ customCreate,
45410
+ customModal,
45411
+ customTabs,
45412
+ defaultActiveTab = "own",
45413
+ customColumns,
45414
+ customCheckboxConfig,
45415
+ customFiltersConfig,
45416
+ customSelectFiltersConfig,
45417
+ getActiveTab,
45418
+ noTabs = false,
45419
+ refetchTrigger,
45420
+ externalOpenDrawer = false
45747
45421
  }) => {
45748
45422
  const {
45749
45423
  activeTab,
@@ -45756,6 +45430,7 @@ const TablePage = ({
45756
45430
  formInfo,
45757
45431
  viewConfig
45758
45432
  } = useTablePage({
45433
+ defaultActiveTab,
45759
45434
  subject,
45760
45435
  location,
45761
45436
  getData,
@@ -45769,63 +45444,573 @@ const TablePage = ({
45769
45444
  data,
45770
45445
  applications,
45771
45446
  subjectClear,
45772
- APP
45447
+ APP,
45448
+ getActiveTab,
45449
+ refetchTrigger
45773
45450
  });
45774
- return /*#__PURE__*/jsxRuntime.jsx(TablePageWithTabs, {
45775
- t: t,
45451
+ const TableComponent = noTabs ? StandardTablePage : TablePageWithTabs;
45452
+ const commonProps = {
45453
+ t,
45776
45454
  title: t(headerInfo?.title || viewConfig?.title || ""),
45777
45455
  breadCrumbs: breadcrumbs,
45778
- location: location,
45779
- loading: loading,
45780
- goTo: goTo,
45781
- defaultActiveTab: "own",
45782
- columns: columns,
45456
+ location,
45457
+ loading,
45458
+ goTo,
45459
+ columns: customColumns || columns,
45460
+ data,
45461
+ checkboxConfig: customCheckboxConfig || checkboxConfig,
45462
+ APP,
45463
+ getApiBaseUrl,
45464
+ selectOptions,
45465
+ selectFiltersConfig: customSelectFiltersConfig || selectFiltersConfig,
45466
+ getRedirectLink,
45467
+ filtersConfig: customFiltersConfig || _filtersConfig,
45468
+ isMobile,
45469
+ view: subject,
45470
+ onDownload: onDownload && typeof onDownload === 'function' ? onDownload : undefined,
45471
+ drawerTitle: t(headerInfo?.createTitle || viewConfig?.createTitle || ""),
45472
+ headerTooltip: headerInfo?.tooltip,
45473
+ drawerTooltip: headerInfo?.drawerTooltip,
45474
+ externalOpenDrawer
45475
+ };
45476
+ const tabsOnlyProps = noTabs ? {} : {
45477
+ tabs: customTabs,
45478
+ defaultActiveTab,
45479
+ getActiveTab: handleActiveTabChange
45480
+ };
45481
+ return /*#__PURE__*/jsxRuntime.jsxs(jsxRuntime.Fragment, {
45482
+ children: [/*#__PURE__*/jsxRuntime.jsx(TableComponent, {
45483
+ ...commonProps,
45484
+ ...tabsOnlyProps,
45485
+ children: ({
45486
+ onDrawerClose,
45487
+ setOpenCreateDrawer
45488
+ }) => customCreate ? customCreate({
45489
+ onDrawerClose,
45490
+ setOpenCreateDrawer
45491
+ }) : /*#__PURE__*/jsxRuntime.jsx(Create$1, {
45492
+ t: t,
45493
+ goTo: goTo,
45494
+ user: user,
45495
+ APP: APP,
45496
+ getApiBaseUrl: getApiBaseUrl,
45497
+ getAppHeader: getAppHeader,
45498
+ getData: formConfig.getFormData,
45499
+ saveData: formConfig.saveFormData,
45500
+ loading: formConfig.formLoading,
45501
+ onSubmitted: (type, m, data) => {
45502
+ if (data.datastakeId) {
45503
+ displayMessage(type, t("affirmations::subject-created-successfully") || m);
45504
+ goTo(`/app/edit/${subject}/${data.datastakeId}`);
45505
+ }
45506
+ },
45507
+ onCancel: onDrawerClose,
45508
+ query: formConfig.query,
45509
+ ajaxForms: formConfig.ajaxForms,
45510
+ changeAjaxForms: formConfig.changeAjaxForms,
45511
+ ajaxOptions: formConfig.ajaxOptions,
45512
+ changeAjaxOptions: formConfig.changeAjaxOptions,
45513
+ formData: formConfig.formData,
45514
+ formValue: formConfig.formValue,
45515
+ form: formConfig.form,
45516
+ namespace: formConfig?.namespace || formInfo?.namespace,
45517
+ view: formConfig?.view || formInfo.view,
45518
+ scope: formConfig?.scope || formInfo.scope,
45519
+ formType: formConfig?.formType || formInfo.formType,
45520
+ defaultData: defaultValues
45521
+ })
45522
+ }), customModal]
45523
+ });
45524
+ };
45525
+
45526
+ const data = {};
45527
+ const Create = ({
45528
+ query,
45529
+ goTo = () => {},
45530
+ user,
45531
+ t = () => {},
45532
+ ajaxForms,
45533
+ changeAjaxForms = () => {},
45534
+ ajaxOptions,
45535
+ changeAjaxOptions = () => {},
45536
+ onClose = () => {},
45537
+ fetchData = () => {},
45538
+ APP,
45539
+ getAppHeader = () => {},
45540
+ getApiBaseUrl = () => {}
45541
+ }) => {
45542
+ const partnerTypes = React.useMemo(() => getPartnerTypes(t), [t]);
45543
+ const partnershipTypes = React.useMemo(() => getPartnershipTypes(t), [t]);
45544
+ const form = React.useMemo(() => ({
45545
+ identification: {
45546
+ partnershipType: {
45547
+ label: t("Type of partnership"),
45548
+ type: "select",
45549
+ position: 1,
45550
+ dataId: "partnershipType",
45551
+ tooltip: /*#__PURE__*/jsxRuntime.jsxs("div", {
45552
+ style: {
45553
+ maxWidth: 296
45554
+ },
45555
+ children: [t("Source: This partner will share information with you."), /*#__PURE__*/jsxRuntime.jsx("br", {}), t("Client: You will share information with this partner."), /*#__PURE__*/jsxRuntime.jsx("br", {}), t("Exchange: You will both share information with each other.")]
45556
+ }),
45557
+ options: partnershipTypes.map(o => ({
45558
+ ...o,
45559
+ label: t(o.label)
45560
+ })),
45561
+ rules: [{
45562
+ required: true,
45563
+ message: "errors::field is required"
45564
+ }]
45565
+ },
45566
+ partnerType: {
45567
+ label: t("Type of partner"),
45568
+ type: "select",
45569
+ position: 2,
45570
+ dataId: "partnerType",
45571
+ options: partnerTypes.map(o => ({
45572
+ ...o,
45573
+ label: t(o.label)
45574
+ })),
45575
+ rules: [{
45576
+ required: true,
45577
+ message: "errors::field is required"
45578
+ }]
45579
+ },
45580
+ nickName: {
45581
+ label: {
45582
+ "partnerType is individual": t("Person name"),
45583
+ "partnerType is organisation": t("Organisation name")
45584
+ },
45585
+ type: "text",
45586
+ position: 3,
45587
+ showIf: "partnerType notEmpty true",
45588
+ dataId: "nickName",
45589
+ rules: [{
45590
+ required: true,
45591
+ message: "errors::field is required"
45592
+ }]
45593
+ },
45594
+ invitationType: {
45595
+ label: t("Invitation type"),
45596
+ type: "select",
45597
+ position: 3,
45598
+ dataId: "invitationType",
45599
+ options: [{
45600
+ label: "Email",
45601
+ value: "email"
45602
+ }, {
45603
+ label: "Application ID",
45604
+ value: "id"
45605
+ }],
45606
+ rules: [{
45607
+ required: true,
45608
+ message: "errors::field is required"
45609
+ }]
45610
+ },
45611
+ email: {
45612
+ label: t("Email"),
45613
+ type: "text",
45614
+ position: 4,
45615
+ showIf: "invitationType is email",
45616
+ dataId: "email",
45617
+ rules: [{
45618
+ required: true,
45619
+ message: "errors::field is required"
45620
+ }, {
45621
+ type: "email",
45622
+ message: "errors::field must be email"
45623
+ }]
45624
+ },
45625
+ datastakeId: {
45626
+ label: t("Application ID"),
45627
+ type: "text",
45628
+ position: 4,
45629
+ showIf: "invitationType is id",
45630
+ dataId: "datastakeId",
45631
+ rules: [{
45632
+ required: true,
45633
+ message: "errors::field is required"
45634
+ }]
45635
+ },
45636
+ partnerMessage: {
45637
+ type: "message",
45638
+ position: 4,
45639
+ label: t("If the user you are inviting is part of an existing organisation, the invitation will be shared with the account administrator of that organisation."),
45640
+ showIf: "partnerType is individual",
45641
+ dataId: "partnerMessage"
45642
+ }
45643
+ }
45644
+ }), [t]);
45645
+ const submit = async data => {
45646
+ try {
45647
+ const {
45648
+ form,
45649
+ ...rest
45650
+ } = data;
45651
+ await PartnerService$1.create(rest);
45652
+ fetchData();
45653
+ onClose();
45654
+ } catch (err) {
45655
+ onClose();
45656
+ antd.message.error(t(err?.response?.data?.message || "Error occured"));
45657
+ console.log(err);
45658
+ }
45659
+ };
45660
+ return /*#__PURE__*/jsxRuntime.jsx(DynamicForm, {
45661
+ form: form,
45783
45662
  data: data,
45784
- checkboxConfig: checkboxConfig,
45785
- APP: APP,
45663
+ showSaveAndNext: false,
45664
+ module: APP,
45665
+ t: t,
45666
+ isCreate: true,
45667
+ user: user,
45668
+ ajaxForms: ajaxForms,
45669
+ ajaxOptions: ajaxOptions,
45670
+ getAppHeader: getAppHeader,
45786
45671
  getApiBaseUrl: getApiBaseUrl,
45787
- selectOptions: selectOptions,
45788
- selectFiltersConfig: selectFiltersConfig,
45672
+ changeAjaxOptions: changeAjaxOptions,
45673
+ app: APP,
45674
+ query: query,
45675
+ goTo: () => {},
45676
+ changeAjaxForms: changeAjaxForms,
45677
+ onCancel: onClose,
45678
+ submit: submit
45679
+ });
45680
+ };
45681
+
45682
+ const Style$3 = styled__default["default"].div`
45683
+ display: flex;
45684
+ gap: 8px;
45685
+ justify-content: center;
45686
+ margin-top: var(--size-lg);
45687
+
45688
+ &.mt-0 {
45689
+ margin-top: 0;
45690
+ }
45691
+
45692
+ .ant-btn {
45693
+ width: 75px;
45694
+ }
45695
+ `;
45696
+ function Footer({
45697
+ onClose = () => {},
45698
+ onSubmit = () => {},
45699
+ t = s => s,
45700
+ loading,
45701
+ className,
45702
+ disabledFooterText,
45703
+ disabledFooter
45704
+ }) {
45705
+ return /*#__PURE__*/jsxRuntime.jsxs(Style$3, {
45706
+ className: className,
45707
+ children: [disabledFooterText ? /*#__PURE__*/jsxRuntime.jsx(antd.Tooltip, {
45708
+ title: t(disabledFooterText),
45709
+ children: /*#__PURE__*/jsxRuntime.jsx(antd.Button, {
45710
+ type: "primary",
45711
+ onClick: onSubmit,
45712
+ disabled: true,
45713
+ children: t(loading ? 'Loading...' : 'Save')
45714
+ })
45715
+ }) : /*#__PURE__*/jsxRuntime.jsx(antd.Button, {
45716
+ type: "primary",
45717
+ onClick: onSubmit,
45718
+ disabled: disabledFooter,
45719
+ children: t(loading ? 'Loading...' : 'Save')
45720
+ }), /*#__PURE__*/jsxRuntime.jsx(antd.Button, {
45721
+ onClick: onClose,
45722
+ children: t('Cancel')
45723
+ })]
45724
+ });
45725
+ }
45726
+
45727
+ const licensingOptions = [{
45728
+ label: 'Open without citation',
45729
+ value: 'no_citation'
45730
+ }, {
45731
+ label: 'Open with citation',
45732
+ value: 'citation'
45733
+ }, {
45734
+ label: 'Conditional re-use',
45735
+ value: 'conditional',
45736
+ disabled: true
45737
+ }, {
45738
+ label: 'Private use',
45739
+ value: 'private'
45740
+ }];
45741
+
45742
+ const Edit$1 = ({
45743
+ partner,
45744
+ onClose = () => {},
45745
+ fetchData = () => {},
45746
+ t = () => {}
45747
+ }) => {
45748
+ const [MainForm] = antd.Form.useForm();
45749
+ const [loading, setLoading] = React.useState(false);
45750
+ React.useMemo(() => getPartnerTypes(t), [t]);
45751
+ const partnershipTypes = React.useMemo(() => getPartnershipTypes(t), [t]);
45752
+ React.useEffect(() => {
45753
+ MainForm.setFieldsValue({
45754
+ ...partner,
45755
+ licensing: 'no_citation'
45756
+ });
45757
+ }, [partner]);
45758
+ const onSubmit = async () => {
45759
+ setLoading(true);
45760
+ try {
45761
+ const val = await MainForm.validateFields();
45762
+ await PartnerService$1.update(partner.id, val);
45763
+ onClose();
45764
+ fetchData();
45765
+ } catch (err) {
45766
+ console.log(err);
45767
+ }
45768
+ setLoading(false);
45769
+ };
45770
+ return /*#__PURE__*/jsxRuntime.jsxs("div", {
45771
+ children: [loading ? /*#__PURE__*/jsxRuntime.jsx(Loading, {}) : null, /*#__PURE__*/jsxRuntime.jsxs(antd.Form, {
45772
+ form: MainForm,
45773
+ layout: "vertical",
45774
+ children: [/*#__PURE__*/jsxRuntime.jsx(antd.Form.Item, {
45775
+ required: true,
45776
+ name: "nickName",
45777
+ rules: [{
45778
+ required: true
45779
+ }],
45780
+ label: t('Name'),
45781
+ children: /*#__PURE__*/jsxRuntime.jsx(antd.Input, {
45782
+ name: "name"
45783
+ })
45784
+ }), /*#__PURE__*/jsxRuntime.jsx(antd.Form.Item, {
45785
+ required: true,
45786
+ name: "partnershipType",
45787
+ label: t('Partner Type'),
45788
+ children: /*#__PURE__*/jsxRuntime.jsx(antd.Select, {
45789
+ children: partnershipTypes.map(type => /*#__PURE__*/jsxRuntime.jsx(antd.Select.Option, {
45790
+ value: type.value,
45791
+ children: type.label
45792
+ }, type.value))
45793
+ })
45794
+ }), /*#__PURE__*/jsxRuntime.jsx(antd.Form.Item, {
45795
+ required: true,
45796
+ name: "email",
45797
+ label: t('Email address'),
45798
+ rules: [{
45799
+ type: 'email',
45800
+ required: true
45801
+ }],
45802
+ children: /*#__PURE__*/jsxRuntime.jsx(antd.Input, {
45803
+ disabled: true
45804
+ })
45805
+ }), /*#__PURE__*/jsxRuntime.jsx(antd.Form.Item, {
45806
+ required: true,
45807
+ name: "licensing",
45808
+ label: t('Licensing'),
45809
+ children: /*#__PURE__*/jsxRuntime.jsx(antd.Select, {
45810
+ disabled: true,
45811
+ children: licensingOptions.map(option => /*#__PURE__*/jsxRuntime.jsx(antd.Select.Option, {
45812
+ value: option.value,
45813
+ children: t(option.label)
45814
+ }, option.value))
45815
+ })
45816
+ })]
45817
+ }), /*#__PURE__*/jsxRuntime.jsx(Footer, {
45818
+ t: t,
45819
+ loading: loading,
45820
+ onClose: onClose,
45821
+ onSubmit: onSubmit
45822
+ })]
45823
+ });
45824
+ };
45825
+
45826
+ const PartnersTable = ({
45827
+ t = () => {},
45828
+ goTo = () => {},
45829
+ user = {},
45830
+ options = {},
45831
+ getRedirectLink = () => {},
45832
+ theme = {},
45833
+ isMobile,
45834
+ APP,
45835
+ location,
45836
+ breadcrumbs = [],
45837
+ getApiBaseUrl = () => {},
45838
+ getAppHeader = () => {},
45839
+ query = {},
45840
+ ajaxForms = {},
45841
+ changeAjaxForms = () => {},
45842
+ ajaxOptions = {},
45843
+ changeAjaxOptions = () => {},
45844
+ applications = [],
45845
+ extendingFilters = {},
45846
+ searchLocationParams
45847
+ }) => {
45848
+ const [totalRequests, setTotalRequests] = React.useState(0);
45849
+ const [selectOptions, setSelectOptions] = React.useState();
45850
+ const [activeTab, setActiveTab] = React.useState();
45851
+ const [pendingEditId, setPendingEditId] = React.useState(null);
45852
+ const [openModal, setOpenModal] = React.useState(false);
45853
+ const {
45854
+ loading,
45855
+ data,
45856
+ requestDataFetch,
45857
+ fetchData,
45858
+ accept,
45859
+ decline,
45860
+ activate,
45861
+ suspend,
45862
+ resendInvite,
45863
+ block,
45864
+ setRequestDataFetch,
45865
+ initFetchDone,
45866
+ setInitFetchDone
45867
+ } = usePartnersActions({
45868
+ setTotalRequests,
45869
+ t
45870
+ });
45871
+ const columns = React.useMemo(() => getColumns$g({
45872
+ t,
45873
+ accept,
45874
+ decline,
45875
+ suspend,
45876
+ resendInvite,
45877
+ activate,
45878
+ activeTab,
45879
+ selectOptions,
45880
+ block,
45881
+ setOpen: setOpenModal,
45882
+ options
45883
+ }), [t, accept, decline, suspend, resendInvite, activate, activeTab, selectOptions, block, setOpenModal, options]);
45884
+ React.useEffect(() => {
45885
+ if (searchLocationParams.has("datastakeId") && !pendingEditId) {
45886
+ setPendingEditId(searchLocationParams.get("datastakeId"));
45887
+ }
45888
+ }, [searchLocationParams, pendingEditId]);
45889
+ React.useEffect(() => {
45890
+ if (pendingEditId) {
45891
+ const partner = data.find(partner => partner.datastakeId === pendingEditId);
45892
+ if (partner) {
45893
+ setOpenModal(partner);
45894
+ setPendingEditId(null);
45895
+ }
45896
+ }
45897
+ }, [data, pendingEditId]);
45898
+ const tabs = React.useMemo(() => [{
45899
+ label: t("List"),
45900
+ key: "partners"
45901
+ }, {
45902
+ label: /*#__PURE__*/jsxRuntime.jsxs("div", {
45903
+ className: "tab-cont",
45904
+ children: [/*#__PURE__*/jsxRuntime.jsx("div", {
45905
+ className: "flex flex-column justify-content-center",
45906
+ children: t('Requests')
45907
+ }), typeof totalRequests === 'number' ? /*#__PURE__*/jsxRuntime.jsx("div", {
45908
+ className: "flex flex-column justify-content-center",
45909
+ children: /*#__PURE__*/jsxRuntime.jsx("div", {
45910
+ className: "bubble",
45911
+ children: /*#__PURE__*/jsxRuntime.jsx("div", {
45912
+ className: "flex flex-column justify-content-center",
45913
+ children: totalRequests
45914
+ })
45915
+ })
45916
+ }) : null]
45917
+ }),
45918
+ key: "requests"
45919
+ }], [t, totalRequests]);
45920
+ const selectFiltersConfig = React.useMemo(() => {
45921
+ return getSelectFiltersConfig$1({
45922
+ t
45923
+ });
45924
+ }, [t]);
45925
+ const filterOptions = React.useMemo(() => {
45926
+ return getFilterOptions$e(options);
45927
+ }, [options, t]);
45928
+ const headerInfo = React.useMemo(() => ({
45929
+ title: "Partners",
45930
+ createTitle: "Create Partner",
45931
+ tooltip: {
45932
+ title: t("Partners"),
45933
+ content: /*#__PURE__*/jsxRuntime.jsxs("div", {
45934
+ className: "max-w-250",
45935
+ children: [t("Partners are organisations sharing their information with you, or receiving your information."), /*#__PURE__*/jsxRuntime.jsx("br", {}), t("Only authorised users can create partnerships.")]
45936
+ })
45937
+ },
45938
+ drawerTooltip: {
45939
+ content: /*#__PURE__*/jsxRuntime.jsxs("div", {
45940
+ className: "max-w-250",
45941
+ children: [t("Source: This partner will share information with you."), ",", /*#__PURE__*/jsxRuntime.jsx("br", {}), t("Client: You will share information with this partner."), ",", /*#__PURE__*/jsxRuntime.jsx("br", {}), t("Exchange: You will both share information with each other.")]
45942
+ })
45943
+ }
45944
+ }), [t]);
45945
+ const customCreate = React.useCallback(({
45946
+ onDrawerClose
45947
+ }) => /*#__PURE__*/jsxRuntime.jsx(Create, {
45948
+ query: query,
45949
+ goTo: goTo,
45950
+ user: user,
45951
+ t: t,
45952
+ ajaxForms: ajaxForms,
45953
+ changeAjaxForms: changeAjaxForms,
45954
+ ajaxOptions: ajaxOptions,
45955
+ changeAjaxOptions: changeAjaxOptions,
45956
+ onClose: onDrawerClose,
45957
+ fetchData: () => setRequestDataFetch(true),
45958
+ APP: APP,
45959
+ getAppHeader: getAppHeader,
45960
+ getApiBaseUrl: getApiBaseUrl
45961
+ }), [query, goTo, user, t, ajaxForms, changeAjaxForms, ajaxOptions, changeAjaxOptions, APP, getAppHeader, getApiBaseUrl, setRequestDataFetch]);
45962
+ const customModal = React.useMemo(() => /*#__PURE__*/jsxRuntime.jsxs(jsxRuntime.Fragment, {
45963
+ children: [/*#__PURE__*/jsxRuntime.jsx(antd.Modal, {
45964
+ open: !!openModal,
45965
+ onCancel: () => setOpenModal(false),
45966
+ footer: null,
45967
+ title: /*#__PURE__*/jsxRuntime.jsx(ModalHeader, {
45968
+ title: t("Edit Settings")
45969
+ }),
45970
+ children: openModal ? /*#__PURE__*/jsxRuntime.jsx(Edit$1, {
45971
+ partner: openModal,
45972
+ fetchData: () => setRequestDataFetch(true),
45973
+ onClose: () => setOpenModal(false),
45974
+ t: t
45975
+ }) : null
45976
+ }), /*#__PURE__*/jsxRuntime.jsx("input", {
45977
+ id: "myInput",
45978
+ hidden: true
45979
+ })]
45980
+ }), [openModal, t, setRequestDataFetch]);
45981
+ const handleActiveTabChange = React.useCallback(value => {
45982
+ setActiveTab(value);
45983
+ }, []);
45984
+ return /*#__PURE__*/jsxRuntime.jsx(TablePage, {
45985
+ t: t,
45986
+ goTo: goTo,
45987
+ user: user,
45988
+ options: filterOptions,
45789
45989
  getRedirectLink: getRedirectLink,
45790
- filtersConfig: _filtersConfig,
45990
+ theme: theme,
45991
+ loading: loading,
45992
+ data: data,
45791
45993
  isMobile: isMobile,
45792
- view: subject,
45994
+ APP: APP,
45995
+ location: location,
45996
+ headerInfo: headerInfo,
45997
+ extendingFilters: extendingFilters,
45998
+ getData: fetchData,
45999
+ getApiBaseUrl: getApiBaseUrl,
46000
+ getAppHeader: getAppHeader,
46001
+ applications: applications,
46002
+ subject: "partners",
46003
+ breadcrumbs: breadcrumbs,
46004
+ customCreate: customCreate,
46005
+ customModal: customModal,
46006
+ customTabs: tabs,
46007
+ defaultActiveTab: "partners",
46008
+ customColumns: columns,
46009
+ customCheckboxConfig: checkboxConfig$1,
46010
+ customFiltersConfig: filtersConfig$1,
46011
+ customSelectFiltersConfig: selectFiltersConfig,
45793
46012
  getActiveTab: handleActiveTabChange,
45794
- onDownload: onDownload && typeof onDownload === 'function' ? onDownload : undefined,
45795
- drawerTitle: t(headerInfo?.createTitle || viewConfig?.createTitle || ""),
45796
- children: ({
45797
- onDrawerClose
45798
- }) => /*#__PURE__*/jsxRuntime.jsx(Create, {
45799
- t: t,
45800
- goTo: goTo,
45801
- user: user,
45802
- APP: APP,
45803
- getApiBaseUrl: getApiBaseUrl,
45804
- getAppHeader: getAppHeader,
45805
- getData: formConfig.getFormData,
45806
- saveData: formConfig.saveFormData,
45807
- loading: formConfig.formLoading,
45808
- onSubmitted: (type, m, data) => {
45809
- if (data.datastakeId) {
45810
- displayMessage(type, t("affirmations::subject-created-successfully") || m);
45811
- goTo(`/app/edit/${subject}/${data.datastakeId}`);
45812
- }
45813
- },
45814
- onCancel: onDrawerClose,
45815
- query: formConfig.query,
45816
- ajaxForms: formConfig.ajaxForms,
45817
- changeAjaxForms: formConfig.changeAjaxForms,
45818
- ajaxOptions: formConfig.ajaxOptions,
45819
- changeAjaxOptions: formConfig.changeAjaxOptions,
45820
- formData: formConfig.formData,
45821
- formValue: formConfig.formValue,
45822
- form: formConfig.form,
45823
- namespace: formConfig?.namespace || formInfo?.namespace,
45824
- view: formConfig?.view || formInfo.view,
45825
- scope: formConfig?.scope || formInfo.scope,
45826
- formType: formConfig?.formType || formInfo.formType,
45827
- defaultData: defaultValues
45828
- })
46013
+ refetchTrigger: requestDataFetch
45829
46014
  });
45830
46015
  };
45831
46016
 
@@ -51116,7 +51301,7 @@ class SourceService extends BaseService {
51116
51301
  ...rest
51117
51302
  } = filters;
51118
51303
  const params = {
51119
- filters: rest,
51304
+ ...rest,
51120
51305
  pagination: {
51121
51306
  skip: page,
51122
51307
  take: pageSize
@@ -55442,13 +55627,6 @@ const PlantingLocations = ({
55442
55627
  });
55443
55628
  };
55444
55629
 
55445
- /**
55446
- * Formats a date based on the time filter
55447
- * @param {dayjs.Dayjs} date - The date to format
55448
- * @param {boolean} breakLine - Whether to add a line break (for tooltips)
55449
- * @param {string} timeFilter - The time filter ('daily', 'weekly', 'monthly', 'yearly')
55450
- * @returns {string} Formatted date string
55451
- */
55452
55630
  const getFormatDate = (date, breakLine = false, timeFilter = 'monthly') => {
55453
55631
  switch (timeFilter) {
55454
55632
  case "daily":
@@ -55462,12 +55640,6 @@ const getFormatDate = (date, breakLine = false, timeFilter = 'monthly') => {
55462
55640
  return breakLine ? `${capitalize(date.format("MMM"))}\n${date.format("YY")}` : `${capitalize(date.format("MMM"))} ${date.format("YY")}`;
55463
55641
  }
55464
55642
  };
55465
-
55466
- /**
55467
- * Gets the time quantity string for dayjs operations
55468
- * @param {string} timeFilter - The time filter ('daily', 'weekly', 'monthly', 'yearly')
55469
- * @returns {string} Time quantity string ('days', 'weeks', 'months', 'years')
55470
- */
55471
55643
  const getTimeQuantity = (timeFilter = 'monthly') => {
55472
55644
  switch (timeFilter) {
55473
55645
  case "daily":
@@ -55480,15 +55652,6 @@ const getTimeQuantity = (timeFilter = 'monthly') => {
55480
55652
  return "months";
55481
55653
  }
55482
55654
  };
55483
-
55484
- /**
55485
- * Gets previous cumulative score from data before start date
55486
- * @param {Array} dates - Array of data objects with date field
55487
- * @param {dayjs.Dayjs} startDate - The start date
55488
- * @param {string} timeFilter - The time filter
55489
- * @param {string} valueField - The field name to extract value from (default: 'total')
55490
- * @returns {Object} Object with hasPreviousData, previousCumulativeScore, previousMaxScore
55491
- */
55492
55655
  const getPreviousGraphData = (dates, startDate, timeFilter, valueField = 'total') => {
55493
55656
  let previousCumulativeScore = 0;
55494
55657
  let previousMaxScore = 0;
@@ -55524,17 +55687,6 @@ const getPreviousGraphData = (dates, startDate, timeFilter, valueField = 'total'
55524
55687
  previousMaxScore
55525
55688
  };
55526
55689
  };
55527
-
55528
- /**
55529
- * Processes chart data with time filtering support
55530
- * @param {Object} params - Parameters object
55531
- * @param {Array} params.mainData - Array of data objects with date and value fields
55532
- * @param {string} params.timeFilter - Time filter ('daily', 'weekly', 'monthly', 'yearly')
55533
- * @param {Object} params.filters - Optional filters object with timeframe
55534
- * @param {boolean} params.isCumulative - Whether to calculate cumulative values (default: false)
55535
- * @param {string} params.valueField - Field name to extract value from (default: 'total', also checks 'count', 'jobs', 'value')
55536
- * @returns {Array} Processed chart data array
55537
- */
55538
55690
  const processChartDateData = ({
55539
55691
  mainData,
55540
55692
  timeFilter: filter,
@@ -55546,8 +55698,35 @@ const processChartDateData = ({
55546
55698
  const dates = mainData || [];
55547
55699
  const isEmpty = !mainData || !Array.isArray(mainData) || mainData.length === 0;
55548
55700
  const _data = [];
55549
- let end = filters?.timeframe?.endDate || dayjs__default["default"]();
55550
- let start = filters?.timeframe?.startDate || dayjs__default["default"]().add(-12, timeQuantity);
55701
+
55702
+ // Derive date range from actual data if no filters provided and data exists
55703
+ let end, start;
55704
+ if (filters?.timeframe?.endDate) {
55705
+ end = filters.timeframe.endDate;
55706
+ } else if (!isEmpty) {
55707
+ // Find the latest date in the data
55708
+ const sortedDates = dates.map(d => dayjs__default["default"](d.date, "YYYY-MM-DD")).filter(d => d.isValid()).sort((a, b) => b.valueOf() - a.valueOf());
55709
+ end = sortedDates.length > 0 ? sortedDates[0] : dayjs__default["default"]();
55710
+ } else {
55711
+ end = dayjs__default["default"]();
55712
+ }
55713
+ if (filters?.timeframe?.startDate) {
55714
+ start = filters.timeframe.startDate;
55715
+ } else if (!isEmpty) {
55716
+ // Find the earliest date in the data
55717
+ const sortedDates = dates.map(d => dayjs__default["default"](d.date, "YYYY-MM-DD")).filter(d => d.isValid()).sort((a, b) => a.valueOf() - b.valueOf());
55718
+ start = sortedDates.length > 0 ? sortedDates[0] : dayjs__default["default"]().add(-12, timeQuantity);
55719
+
55720
+ // For daily filter, limit to last 14 days to avoid overcrowded x-axis
55721
+ if (filter === "daily" && end) {
55722
+ const maxDailyStart = end.subtract(13, 'days'); // 14 days total including end date
55723
+ if (start.isBefore(maxDailyStart)) {
55724
+ start = maxDailyStart;
55725
+ }
55726
+ }
55727
+ } else {
55728
+ start = dayjs__default["default"]().add(-12, timeQuantity);
55729
+ }
55551
55730
 
55552
55731
  // Normalize start and end to period boundaries
55553
55732
  if (filter === "daily") {
@@ -55563,6 +55742,30 @@ const processChartDateData = ({
55563
55742
  start = start.startOf('month');
55564
55743
  end = end.startOf('month');
55565
55744
  }
55745
+
55746
+ // Ensure minimum number of periods to fill the x-axis properly
55747
+ const getMinPeriods = f => {
55748
+ switch (f) {
55749
+ case "daily":
55750
+ return 14;
55751
+ // At least 14 days
55752
+ case "weekly":
55753
+ return 8;
55754
+ // At least 8 weeks
55755
+ case "yearly":
55756
+ return 5;
55757
+ // At least 5 years
55758
+ default:
55759
+ return 12;
55760
+ // At least 12 months
55761
+ }
55762
+ };
55763
+ const minPeriods = getMinPeriods(filter);
55764
+ const periodsDiff = end.diff(start, timeQuantity);
55765
+ if (periodsDiff < minPeriods - 1) {
55766
+ const periodsToAdd = minPeriods - 1 - periodsDiff;
55767
+ start = start.subtract(periodsToAdd, timeQuantity);
55768
+ }
55566
55769
  let i = 0;
55567
55770
  let cumulativeScore = 0;
55568
55771
 
@@ -55629,13 +55832,6 @@ const processChartDateData = ({
55629
55832
  }
55630
55833
  return _data;
55631
55834
  };
55632
-
55633
- /**
55634
- * Formats date axis labels, checking if already formatted
55635
- * @param {string} label - The label to format
55636
- * @param {Function} getFormatDateFn - Function to format dates
55637
- * @returns {string} Formatted date string
55638
- */
55639
55835
  const formatDateAxis = (label, getFormatDateFn) => {
55640
55836
  if (!label) return label;
55641
55837
 
@@ -61023,7 +61219,7 @@ const getColumns$1 = ({
61023
61219
  userRoles = [],
61024
61220
  company = {},
61025
61221
  canCreate = false,
61026
- app
61222
+ APP
61027
61223
  }) => [
61028
61224
  // {
61029
61225
  // dataIndex: 'datastakeId',
@@ -61196,7 +61392,7 @@ const getColumns$1 = ({
61196
61392
  key: "copyLink",
61197
61393
  onClick: () => {
61198
61394
  if (location.pathname.includes(`/${APP}`)) {
61199
- navigator.clipboard.writeText(`${window.location.host}/${app}/r/${company.inviteToken}/${all.invitationToken}`);
61395
+ navigator.clipboard.writeText(`${window.location.host}/${APP}/r/${company.inviteToken}/${all.invitationToken}`);
61200
61396
  } else {
61201
61397
  navigator.clipboard.writeText(`${window.location.host}/r/${company.inviteToken}/${all.invitationToken}`);
61202
61398
  }
@@ -61457,6 +61653,7 @@ const UsersCreate = ({
61457
61653
  }
61458
61654
  }
61459
61655
  });
61656
+ onCancel();
61460
61657
  }
61461
61658
  })
61462
61659
  });
@@ -61485,11 +61682,12 @@ const UsersTable = ({
61485
61682
  ajaxOptions = {},
61486
61683
  changeAjaxOptions = () => {},
61487
61684
  extendingFilters = {},
61488
- userRoles = []
61685
+ userRoles = [],
61686
+ breadCrumbs = []
61489
61687
  }) => {
61490
61688
  const [selectOptions, setSelectOptions] = React.useState();
61491
61689
  const params = new URLSearchParams(location?.search);
61492
- const [openCreateModal, setOpenCreateModal] = React.useState(params.has("create"));
61690
+ React.useState(params.has("create"));
61493
61691
  const [userToEdit, setUserToEdit] = React.useState(null);
61494
61692
  const columns = React.useMemo(() => getColumns$1({
61495
61693
  t,
@@ -61500,35 +61698,9 @@ const UsersTable = ({
61500
61698
  theme,
61501
61699
  subject: 'user',
61502
61700
  data,
61503
- setUserToEdit
61701
+ setUserToEdit,
61702
+ APP
61504
61703
  }), [t, goTo, user, options, getRedirectLink, theme, data]);
61505
- const breadCrumbs = [];
61506
- const {
61507
- paginationQuery,
61508
- searchParams,
61509
- otherParams,
61510
- sortBy,
61511
- sortDir
61512
- } = useGetQueryParams({
61513
- location
61514
- });
61515
- React.useMemo(() => ({
61516
- ...otherParams,
61517
- ...extendingFilters
61518
- }), [otherParams, extendingFilters]);
61519
- React.useEffect(() => {
61520
- getData({
61521
- pagination: paginationQuery,
61522
- ...(Object.keys(searchParams).length > 0 && {
61523
- search: searchParams
61524
- }),
61525
- ...otherParams,
61526
- sortBy: {
61527
- [sortBy || 'updatedAt']: sortDir ? sortDir === 'ascend' ? 1 : -1 : -1
61528
- },
61529
- ...extendingFilters
61530
- }, 'users');
61531
- }, [location.search, JSON.stringify(extendingFilters)]);
61532
61704
  const selectFiltersConfig = React.useMemo(() => getFiltersConfig({
61533
61705
  t
61534
61706
  }), [t]);
@@ -61538,84 +61710,65 @@ const UsersTable = ({
61538
61710
  ...getFilterOptions(options)
61539
61711
  }));
61540
61712
  }, [options, t]);
61541
- return /*#__PURE__*/jsxRuntime.jsxs("div", {
61542
- className: "semibold form-input-output daf-create-view",
61543
- children: [/*#__PURE__*/jsxRuntime.jsx(DAFHeader, {
61544
- title: t("users"),
61545
- breadcrumbs: breadCrumbs,
61546
- actionButtons: [{
61547
- type: "primary",
61548
- onClick: () => setOpenCreateModal(true),
61549
- tooltip: t("New"),
61550
- icon: "Add"
61551
- }]
61552
- // onDownload={() => {
61553
- // console.log("download");
61554
- // }}
61555
- // downloadDisabled={false}
61556
- }), /*#__PURE__*/jsxRuntime.jsx(BaseScreen, {
61713
+ const customCreate = ({
61714
+ onDrawerClose
61715
+ }) => {
61716
+ return /*#__PURE__*/jsxRuntime.jsx(UsersCreate, {
61557
61717
  t: t,
61558
- checkboxConfig: checkboxConfig,
61559
- defaultTableFilters: {},
61560
- columns: columns,
61561
- data: data,
61562
- loading: loading,
61563
- location: location,
61564
61718
  goTo: goTo,
61719
+ user: user,
61565
61720
  APP: APP,
61566
61721
  getApiBaseUrl: getApiBaseUrl,
61567
- selectOptions: selectOptions,
61568
- selectFilters: selectFiltersConfig,
61569
- view: "users",
61570
- getRedirectLink: getRedirectLink,
61571
- defaultUrlParams: {},
61572
- module: APP,
61573
- filtersConfig: filtersConfig,
61574
- isMobile: isMobile
61575
- }), (openCreateModal || !!userToEdit) && /*#__PURE__*/jsxRuntime.jsx(antd.Drawer, {
61576
- destroyOnClose: true,
61577
- title: /*#__PURE__*/jsxRuntime.jsx(DrawerHeader, {
61578
- title: t(userToEdit ? "Edit User" : "New User")
61579
- }),
61580
- open: openCreateModal || !!userToEdit,
61581
- onClose: () => {
61582
- setOpenCreateModal(false);
61583
- setUserToEdit(null);
61722
+ getAppHeader: getAppHeader,
61723
+ onSubmitted: payload => {
61724
+ if (userToEdit) {
61725
+ onEditUser(payload);
61726
+ } else {
61727
+ onInviteUser(payload);
61728
+ }
61729
+ onDrawerClose();
61584
61730
  },
61585
- width: CREATE_DRAWER_WIDTH,
61586
- bodyStyle: {
61587
- padding: 0
61731
+ onCancel: () => {
61732
+ onDrawerClose();
61588
61733
  },
61589
- maskClosable: false,
61590
- children: /*#__PURE__*/jsxRuntime.jsx(UsersCreate, {
61591
- t: t,
61592
- goTo: goTo,
61593
- user: user,
61594
- APP: APP,
61595
- getApiBaseUrl: getApiBaseUrl,
61596
- getAppHeader: getAppHeader,
61597
- onSubmitted: payload => {
61598
- if (userToEdit) {
61599
- onEditUser(payload);
61600
- } else {
61601
- onInviteUser(payload);
61602
- }
61603
- setOpenCreateModal(false);
61604
- setUserToEdit(null);
61605
- },
61606
- onCancel: () => {
61607
- setOpenCreateModal(false);
61608
- setUserToEdit(null);
61609
- },
61610
- query: query,
61611
- ajaxForms: ajaxForms,
61612
- changeAjaxForms: changeAjaxForms,
61613
- ajaxOptions: ajaxOptions,
61614
- changeAjaxOptions: changeAjaxOptions,
61615
- userRoles: userRoles,
61616
- userToEdit: userToEdit
61617
- })
61618
- })]
61734
+ query: query,
61735
+ ajaxForms: ajaxForms,
61736
+ changeAjaxForms: changeAjaxForms,
61737
+ ajaxOptions: ajaxOptions,
61738
+ changeAjaxOptions: changeAjaxOptions,
61739
+ userRoles: userRoles,
61740
+ userToEdit: userToEdit
61741
+ });
61742
+ };
61743
+ return /*#__PURE__*/jsxRuntime.jsx(TablePage, {
61744
+ t: t,
61745
+ goTo: goTo,
61746
+ user: user,
61747
+ options: options,
61748
+ getRedirectLink: getRedirectLink,
61749
+ theme: theme,
61750
+ loading: loading,
61751
+ data: data,
61752
+ isMobile: isMobile,
61753
+ APP: APP,
61754
+ location: location,
61755
+ getData: getData,
61756
+ getApiBaseUrl: getApiBaseUrl,
61757
+ getAppHeader: getAppHeader,
61758
+ extendingFilters: extendingFilters,
61759
+ subject: "users",
61760
+ breadcrumbs: breadCrumbs,
61761
+ headerInfo: {
61762
+ title: "users",
61763
+ createTitle: "New User"
61764
+ },
61765
+ noTabs: true,
61766
+ customCreate: customCreate,
61767
+ customColumns: columns,
61768
+ customCheckboxConfig: checkboxConfig,
61769
+ customFiltersConfig: filtersConfig,
61770
+ customSelectFiltersConfig: selectFiltersConfig,
61771
+ externalOpenDrawer: !!userToEdit
61619
61772
  });
61620
61773
  };
61621
61774
 
@@ -61924,10 +62077,14 @@ const useCallToGetData = ({
61924
62077
  version,
61925
62078
  user,
61926
62079
  setLoading,
61927
- APP
62080
+ APP,
62081
+ selectedPartners
61928
62082
  }) => {
61929
62083
  const isFirstRender = React.useRef(true);
61930
62084
  const callToGetData = (_doCall = false) => {
62085
+ if (selectedPartners?.loading) {
62086
+ return;
62087
+ }
61931
62088
  const dKey = namespaceConfig?.dataKey;
61932
62089
  const nKey = `${APP}-${getNkey(namespace || "")}`;
61933
62090
  const doCall = _doCall ? true : hasKeyInObject(allData, dKey) && hasKeyInObject(allData[dKey], nKey) ? allData[dKey][nKey]?.data?.datastakeId !== id : true;
@@ -61943,7 +62100,7 @@ const useCallToGetData = ({
61943
62100
  return;
61944
62101
  }
61945
62102
  callToGetData(true);
61946
- }, [source, version]);
62103
+ }, [source, version, selectedPartners?.partners]);
61947
62104
  React.useEffect(() => {
61948
62105
  callToGetData(true);
61949
62106
  }, [id, namespace, user.language]);
@@ -62494,6 +62651,7 @@ const View = ({
62494
62651
  APP,
62495
62652
  viewConfig,
62496
62653
  partners,
62654
+ selectedPartners,
62497
62655
  setSelectedPartners,
62498
62656
  user,
62499
62657
  serviceMap,
@@ -62656,7 +62814,7 @@ const View = ({
62656
62814
  }),
62657
62815
  datastakeId: id ? id : 'user',
62658
62816
  version,
62659
- source
62817
+ sources: source || selectedPartners?.partners
62660
62818
  });
62661
62819
  }
62662
62820
  };
@@ -62671,7 +62829,8 @@ const View = ({
62671
62829
  version,
62672
62830
  user,
62673
62831
  setLoading,
62674
- APP
62832
+ APP,
62833
+ selectedPartners
62675
62834
  });
62676
62835
  const extraLinking = React.useMemo(() => {
62677
62836
  return null;
@@ -62701,7 +62860,7 @@ const View = ({
62701
62860
  children: [/*#__PURE__*/jsxRuntime.jsxs("div", {
62702
62861
  className: "daf-view-form",
62703
62862
  children: [/*#__PURE__*/jsxRuntime.jsx(DAFHeader, {
62704
- title: (namespace === 'kyc' ? "KYC" : data?.name) || "",
62863
+ title: (namespace === 'kyc' ? `${user?.firstName} ${user?.lastName} - KYC` : data?.name) || "",
62705
62864
  breadcrumbs: breadcrumbs,
62706
62865
  goBackTo: goBack,
62707
62866
  actionButtons: actionButtons,
@@ -63001,6 +63160,7 @@ const Edit = ({
63001
63160
  params,
63002
63161
  clear,
63003
63162
  getRedirectLink,
63163
+ selectedPartners,
63004
63164
  pathname,
63005
63165
  search,
63006
63166
  viewConfig,
@@ -63117,7 +63277,8 @@ const Edit = ({
63117
63277
  ...(namespaceConfig?.scope && {
63118
63278
  scope: namespaceConfig.scope
63119
63279
  }),
63120
- datastakeId: id ? id : 'user'
63280
+ datastakeId: id ? id : 'user',
63281
+ sources: selectedPartners?.partners
63121
63282
  });
63122
63283
  }
63123
63284
  };
@@ -63132,7 +63293,8 @@ const Edit = ({
63132
63293
  version: null,
63133
63294
  user,
63134
63295
  setLoading,
63135
- APP
63296
+ APP,
63297
+ selectedPartners
63136
63298
  });
63137
63299
  const callback = (type, m) => {
63138
63300
  localStorage.removeItem(`${id}-loading`);