datastake-daf 0.6.737 → 0.6.738

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 (37) hide show
  1. package/dist/components/index.js +12 -5
  2. package/dist/hooks/index.js +4 -2
  3. package/dist/layouts/index.js +18 -5
  4. package/dist/pages/index.js +1410 -70
  5. package/dist/services/index.js +84 -0
  6. package/dist/utils/index.js +4 -4
  7. package/package.json +1 -1
  8. package/public/assets/favicons/datastake-black.svg +13 -0
  9. package/public/assets/favicons/datastake-white.svg +13 -0
  10. package/src/@daf/core/components/Sidenav/index.jsx +15 -3
  11. package/src/@daf/hooks/useGetQueryParams.js +2 -2
  12. package/src/@daf/layouts/AppLayout/components/Sidenav/index.js +2 -0
  13. package/src/@daf/layouts/AppLayout/index.jsx +6 -1
  14. package/src/@daf/pages/dashboards/AllInformation/Documents/columns.js +106 -0
  15. package/src/@daf/pages/dashboards/AllInformation/Documents/config.js +31 -0
  16. package/src/@daf/pages/dashboards/AllInformation/Documents/create.jsx +104 -0
  17. package/src/@daf/pages/dashboards/AllInformation/Documents/index.jsx +156 -0
  18. package/src/@daf/pages/dashboards/AllInformation/Events/columns.js +150 -0
  19. package/src/@daf/pages/dashboards/AllInformation/Events/config.js +31 -0
  20. package/src/@daf/pages/dashboards/AllInformation/Events/create.jsx +104 -0
  21. package/src/@daf/pages/dashboards/AllInformation/Events/index.jsx +156 -0
  22. package/src/@daf/pages/dashboards/AllInformation/Locations/index.jsx +1 -2
  23. package/src/@daf/pages/dashboards/Operations/Operators/columns.js +150 -0
  24. package/src/@daf/pages/dashboards/Operations/Operators/config.js +31 -0
  25. package/src/@daf/pages/dashboards/Operations/Operators/create.jsx +104 -0
  26. package/src/@daf/pages/dashboards/Operations/Operators/index.jsx +156 -0
  27. package/src/@daf/pages/pages/TablePageWithTabs/index.jsx +2 -2
  28. package/src/@daf/services/OperatorService.js +90 -0
  29. package/src/helpers/StringHelper.js +4 -4
  30. package/src/pages.js +5 -2
  31. package/src/services.js +2 -1
  32. package/build/favicon.ico +0 -0
  33. package/build/logo192.png +0 -0
  34. package/build/logo512.png +0 -0
  35. package/build/manifest.json +0 -25
  36. package/build/robots.txt +0 -3
  37. package/dist/style/datastake/mapbox-gl.css +0 -330
@@ -0,0 +1,156 @@
1
+ import React, { useMemo, useState, useEffect, useCallback } from 'react'
2
+ import TablePageWithTabs from '../../../pages/TablePageWithTabs/index.jsx'
3
+ import { getColumns } from './columns.js';
4
+ import { checkboxConfig, getFiltersConfig, filtersConfig, getFilterOptions } from './config.js';
5
+ import { useGetQueryParams } from '../../../../hooks/useGetQueryParams.js';
6
+ import DocumentsCreate from './create.jsx';
7
+ import { displayMessage } from '../../../../../helpers/messages.js';
8
+
9
+ const DocumentsTable = ({
10
+ t = () => {},
11
+ goTo = () => {},
12
+ user = {},
13
+ options = {},
14
+ getRedirectLink = () => {},
15
+ theme = {},
16
+ loading = false,
17
+ data = {},
18
+ isMobile,
19
+ APP,
20
+ location,
21
+ getData = () => {},
22
+ getApiBaseUrl = () => {},
23
+ getAppHeader = () => {},
24
+ getFormData = () => {},
25
+ saveFormData = () => {},
26
+ formLoading = false,
27
+ query = {},
28
+ ajaxForms = {},
29
+ changeAjaxForms = () => {},
30
+ ajaxOptions = {},
31
+ changeAjaxOptions = () => {},
32
+ formData = {},
33
+ formValue = {},
34
+ form = {},
35
+ extendingFilters = {},
36
+ }) => {
37
+ const [selectOptions, setSelectOptions] = useState();
38
+ const [activeTab, setActiveTab] = useState();
39
+
40
+ const columns = useMemo(() => getColumns({
41
+ t,
42
+ goTo,
43
+ user,
44
+ options,
45
+ activeTab,
46
+ getRedirectLink,
47
+ theme,
48
+ subject: 'documents',
49
+ data,
50
+ }), [t, goTo, user, options, activeTab, getRedirectLink, theme, data]);
51
+
52
+ const breadCrumbs = [];
53
+
54
+ const { paginationQuery, searchParams, otherParams, sortBy, sortDir } = useGetQueryParams({location});
55
+
56
+ const filters = useMemo(() => {
57
+ return {
58
+ ...otherParams,
59
+ ...extendingFilters
60
+ }
61
+ }, [otherParams, extendingFilters])
62
+
63
+ useEffect(() => {
64
+ console.log("fetching data")
65
+ getData({
66
+ pagination: paginationQuery,
67
+ ...(Object.keys(filters).length > 0 && { filters: filters }),
68
+ ...(Object.keys(searchParams).length > 0 && { search: searchParams }),
69
+ tab: activeTab,
70
+ sortBy: {
71
+ [sortBy || "updatedAt"]: sortDir ? (sortDir === "ascend" ? 1 : -1) : -1,
72
+ }
73
+ }, 'documents')
74
+ console.log("data fetched")
75
+ }, [location.search, activeTab, JSON.stringify(extendingFilters)]);
76
+
77
+ console.log({data})
78
+
79
+ const selectFiltersConfig = useMemo(() => {
80
+ return getFiltersConfig({t});
81
+ }, [t]);
82
+
83
+ useEffect(() => {
84
+ setSelectOptions((prev) => ({
85
+ ...prev,
86
+ ...getFilterOptions(options, t),
87
+ }))
88
+ }, [options, t])
89
+
90
+ const handleActiveTabChange = useCallback((value) => {
91
+ setActiveTab(value);
92
+ }, []);
93
+
94
+ return (
95
+ <TablePageWithTabs
96
+ t={t}
97
+ title={t("documents")}
98
+ breadCrumbs={breadCrumbs}
99
+ location={location}
100
+ loading={loading}
101
+ goTo={goTo}
102
+ defaultActiveTab={"all"}
103
+ columns={columns}
104
+ data={data}
105
+ checkboxConfig={checkboxConfig}
106
+ APP={APP}
107
+ getApiBaseUrl={getApiBaseUrl}
108
+ selectOptions={selectOptions}
109
+ selectFiltersConfig={selectFiltersConfig}
110
+ getRedirectLink={getRedirectLink}
111
+ filtersConfig={filtersConfig}
112
+ isMobile={isMobile}
113
+ view="documents"
114
+ getActiveTab={handleActiveTabChange}
115
+ onDownload={() => {
116
+ console.log("download");
117
+ }}
118
+ drawerTitle={t("Create Document")}
119
+ >
120
+ {({onDrawerClose}) => (
121
+ <DocumentsCreate
122
+ t={t}
123
+ goTo={goTo}
124
+ user={user}
125
+ APP={APP}
126
+ getApiBaseUrl={getApiBaseUrl}
127
+ getAppHeader={getAppHeader}
128
+ getData={getFormData}
129
+ saveData={saveFormData}
130
+ loading={formLoading}
131
+ onSubmitted={(type, m, data) => {
132
+ if (data.datastakeId) {
133
+ displayMessage(
134
+ type,
135
+ t("affirmations::subject-created-successfully") || m,
136
+ );
137
+ // goTo(`/app/edit/stakeholders/${data.datastakeId}`);
138
+ goTo(`/app/edit/documents/${data.datastakeId}`)
139
+ }
140
+ }}
141
+ onCancel={onDrawerClose}
142
+ query={query}
143
+ ajaxForms={ajaxForms}
144
+ changeAjaxForms={changeAjaxForms}
145
+ ajaxOptions={ajaxOptions}
146
+ changeAjaxOptions={changeAjaxOptions}
147
+ formData={formData}
148
+ formValue={formValue}
149
+ form={form}
150
+ />
151
+ )}
152
+ </TablePageWithTabs>
153
+ )
154
+ }
155
+
156
+ export default DocumentsTable
@@ -0,0 +1,150 @@
1
+ import React from 'react';
2
+ import { Tooltip } from 'antd';
3
+ import { findOptions } from '../../../../../helpers/StringHelper.js';
4
+ import { renderDateFormatted } from '../../../../../helpers/Forms.js';
5
+ import CustomIcon from '../../../../core/components/Icon/CustomIcon.jsx';
6
+ import AvatarGroup from '../../../../core/components/AvatarGroup/index.jsx';
7
+
8
+ const getLinkValue = (value, linkingObject) => {
9
+ if(linkingObject && linkingObject?.[value]) {
10
+ return linkingObject?.[value]?.name;
11
+ }
12
+ return null;
13
+ }
14
+
15
+ export const getColumns = ({t, goTo, user, options, activeTab, getRedirectLink, theme, subject, data}) => [
16
+ {
17
+ dataIndex: 'datastakeId',
18
+ title: t('ID'),
19
+ ellipsis: true,
20
+ show: true,
21
+ render: (v, all) => {
22
+ if (all.empty) {
23
+ return <div className="daf-default-cell" />
24
+ }
25
+
26
+ return <Tooltip title={v}>{v}</Tooltip>;
27
+ },
28
+ },
29
+ {
30
+ dataIndex: 'name',
31
+ title: t('Name'),
32
+ ellipsis: true,
33
+ show: true,
34
+ render: (v, all) => {
35
+ if (all.empty) {
36
+ return <div className="daf-default-cell" />
37
+ }
38
+
39
+ return <Tooltip title={v}>{v}</Tooltip>;
40
+ },
41
+ },
42
+ {
43
+ dataIndex: 'type',
44
+ title: t('Type'),
45
+ ellipsis: true,
46
+ show: true,
47
+ render: (v, all) => {
48
+ if (all.empty) {
49
+ return <div className="daf-default-cell" />
50
+ }
51
+
52
+ const type = findOptions(v, data?.options?.locationCategories);
53
+
54
+ return type ? <Tooltip title={type}>{type}</Tooltip> : '-';
55
+ },
56
+ },
57
+ {
58
+ dataIndex: 'keyStakeholder',
59
+ title: t('Key Stakeholder'),
60
+ ellipsis: true,
61
+ show: true,
62
+ render: (v, all) => {
63
+ if (all.empty) {
64
+ return <div className="daf-default-cell" />
65
+ }
66
+
67
+ const country = findOptions(v, options?.countries);
68
+
69
+ return country ? <Tooltip title={country}>{country}</Tooltip> : '-';
70
+ },
71
+ },
72
+ {
73
+ dataIndex: 'scope',
74
+ title: t('Scope'),
75
+ ellipsis: true,
76
+ show: true,
77
+ render: (v, all) => {
78
+ if (all.empty) {
79
+ return <div className="daf-default-cell" />
80
+ }
81
+
82
+ const scope = getLinkValue(v, all?.linking?.SCL);
83
+
84
+ return scope ? <Tooltip title={scope}>{scope}</Tooltip> : '-';
85
+ },
86
+ },
87
+ {
88
+ title: t("Start Date"),
89
+ dataIndex: "startDate",
90
+ key: "startDate",
91
+ width: 125,
92
+ render: (date, all) => {
93
+ if (all.empty) {
94
+ return <div className="daf-default-cell" />;
95
+ }
96
+
97
+ const _date = date ? renderDateFormatted(date, "DD MMM YYYY", user?.language || 'en') : "-";
98
+ return <Tooltip title={_date}>{_date}</Tooltip>;
99
+ },
100
+ ellipsis: true,
101
+ },
102
+ {
103
+ title: t("End Date"),
104
+ dataIndex: "endDate",
105
+ key: "endDate",
106
+ width: 125,
107
+ render: (date, all) => {
108
+ if (all.empty) {
109
+ return <div className="daf-default-cell" />;
110
+ }
111
+
112
+ const _date = date ? renderDateFormatted(date, "DD MMM YYYY", user?.language || 'en') : "-";
113
+ return <Tooltip title={_date}>{_date}</Tooltip>;
114
+ },
115
+ ellipsis: true,
116
+ },
117
+ {
118
+ title: t("Sources"),
119
+ dataIndex: "sources",
120
+ key: "sources",
121
+ show: activeTab !== "own",
122
+ render: (val, all) => {
123
+ if (all.empty) {
124
+ return <div className="daf-default-cell" />;
125
+ }
126
+
127
+ console.log({val, all})
128
+
129
+ return <AvatarGroup items={val}></AvatarGroup>;
130
+ },
131
+ },
132
+ {
133
+ id: 'actions',
134
+ title: "",
135
+ width: 60,
136
+ render: (_, all) => {
137
+ if (all.empty) {
138
+ return <div className="daf-default-cell" />;
139
+ }
140
+
141
+ const link = `/app/view/${subject}/${all.datastakeId}`;
142
+
143
+ return <div style={{ display: "flex", justifyContent: "center" }}>
144
+ <a href={getRedirectLink(link)}>
145
+ <CustomIcon name="Link" size={15} color={theme.baseGray70} />
146
+ </a>
147
+ </div>;
148
+ }
149
+ }
150
+ ].filter((column) => column.show !== false);
@@ -0,0 +1,31 @@
1
+ export const checkboxConfig = {
2
+ name: 'Name',
3
+ datastakeId: 'ID'
4
+ }
5
+
6
+ export const getFiltersConfig = ({t}) => {
7
+ return {
8
+ country: {
9
+ type: 'select',
10
+ placeholder: t('Country'),
11
+ style: { flex: 1 },
12
+ labelStyle: { flex: 1 },
13
+ getLabel: (option) => option.label,
14
+ getValue: (option) => option.value,
15
+ },
16
+ }
17
+ }
18
+
19
+ export const filtersConfig = {
20
+ name: '',
21
+ datastakeId: '',
22
+ };
23
+
24
+ export const getFilterOptions = (options, t) => {
25
+ const { countries } = options || {};
26
+ const _default = {
27
+ country: countries,
28
+ }
29
+
30
+ return _default;
31
+ }
@@ -0,0 +1,104 @@
1
+ import React, { useEffect} from 'react'
2
+ import { message } from 'antd';
3
+ import { MessageTypes } from '../../../../../helpers/messages.js';
4
+ import DynamicForm from '../../../../core/components/DynamicForm/index.jsx';
5
+
6
+ const EventsCreate = ({
7
+ namespace = 'events',
8
+ view = 'scoping',
9
+ edit = false,
10
+ formData = {},
11
+ loading = false,
12
+ onSubmitted = () => {},
13
+ onCancel = () => {},
14
+ getData = () => {},
15
+ saveData = () => {},
16
+ form: formConfig = {},
17
+ formValue = {},
18
+ defaultData = {},
19
+ user = {},
20
+ APP,
21
+ query,
22
+ goTo = () => {},
23
+ t = () => {},
24
+ ajaxForms = {},
25
+ changeAjaxForms = () => {},
26
+ ajaxOptions = {},
27
+ changeAjaxOptions = () => {},
28
+ getAppHeader = () => {},
29
+ getApiBaseUrl = () => {},
30
+ }) => {
31
+ let {
32
+ form = {},
33
+ data = defaultData || {},
34
+ } = !edit ? (formData[`${APP}-${view}`] || {}) : {
35
+ form: formConfig,
36
+ data: formValue
37
+ };
38
+
39
+ useEffect(() => {
40
+ if (Object.keys(form).length === 0 && !formData[`${APP}-${view}`]) {
41
+ if (!edit) {
42
+ getData({ namespace, module: APP, view, scope: 'global' });
43
+ } else {
44
+ form = formConfig;
45
+ data = formValue;
46
+ }
47
+ }
48
+ }, [edit, user?.language]);
49
+
50
+ return (
51
+ <div className="daf-create-form">
52
+ <DynamicForm
53
+ form={form}
54
+ data={data}
55
+ showSaveAndNext={false}
56
+ module={APP}
57
+ onCancel={onCancel}
58
+ isCreate
59
+ t={t}
60
+ excludedKeys={["title"]}
61
+ user={user}
62
+ ajaxForms={ajaxForms}
63
+ ajaxOptions={ajaxOptions}
64
+ getAppHeader={getAppHeader}
65
+ getApiBaseUrl={getApiBaseUrl}
66
+ changeAjaxOptions={changeAjaxOptions}
67
+ app={APP}
68
+ query={query}
69
+ goTo={goTo}
70
+ changeAjaxForms={changeAjaxForms}
71
+ submit={(payload, setSelectedFormNext) => {
72
+ const payloadData = { ...payload, module: APP, namespace };
73
+
74
+ const newPayload = {
75
+ ...defaultData,
76
+ ...payloadData,
77
+ form: 'location'
78
+ };
79
+
80
+ const callback = (type, m, data) => {
81
+ if (setSelectedFormNext) {
82
+ setSelectedFormNext();
83
+ }
84
+ if (type === MessageTypes.SUCCESS) {
85
+ if (onSubmitted) onSubmitted(type, m, data);
86
+ } else {
87
+ message.error(m);
88
+ }
89
+ };
90
+
91
+ saveData(
92
+ !data && !data.id ? newPayload : Object.assign(newPayload, { id: data.id }),
93
+ callback,
94
+ );
95
+ }}
96
+ isFormDisabled={() => {
97
+ return !data || !data.typeOfEvent;
98
+ }}
99
+ />
100
+ </div>
101
+ )
102
+ }
103
+
104
+ export default EventsCreate
@@ -0,0 +1,156 @@
1
+ import React, { useMemo, useState, useEffect, useCallback } from 'react'
2
+ import TablePageWithTabs from '../../../pages/TablePageWithTabs/index.jsx'
3
+ import { getColumns } from './columns.js';
4
+ import { checkboxConfig, getFiltersConfig, filtersConfig, getFilterOptions } from './config.js';
5
+ import { useGetQueryParams } from '../../../../hooks/useGetQueryParams.js';
6
+ import EventsCreate from './create.jsx';
7
+ import { displayMessage } from '../../../../../helpers/messages.js';
8
+
9
+ const EventsTable = ({
10
+ t = () => {},
11
+ goTo = () => {},
12
+ user = {},
13
+ options = {},
14
+ getRedirectLink = () => {},
15
+ theme = {},
16
+ loading = false,
17
+ data = {},
18
+ isMobile,
19
+ APP,
20
+ location,
21
+ getData = () => {},
22
+ getApiBaseUrl = () => {},
23
+ getAppHeader = () => {},
24
+ getFormData = () => {},
25
+ saveFormData = () => {},
26
+ formLoading = false,
27
+ query = {},
28
+ ajaxForms = {},
29
+ changeAjaxForms = () => {},
30
+ ajaxOptions = {},
31
+ changeAjaxOptions = () => {},
32
+ formData = {},
33
+ formValue = {},
34
+ form = {},
35
+ extendingFilters = {},
36
+ }) => {
37
+ const [selectOptions, setSelectOptions] = useState();
38
+ const [activeTab, setActiveTab] = useState();
39
+
40
+ const columns = useMemo(() => getColumns({
41
+ t,
42
+ goTo,
43
+ user,
44
+ options,
45
+ activeTab,
46
+ getRedirectLink,
47
+ theme,
48
+ subject: 'events',
49
+ data,
50
+ }), [t, goTo, user, options, activeTab, getRedirectLink, theme, data]);
51
+
52
+ const breadCrumbs = [];
53
+
54
+ const { paginationQuery, searchParams, otherParams, sortBy, sortDir } = useGetQueryParams({location});
55
+
56
+ const filters = useMemo(() => {
57
+ return {
58
+ ...otherParams,
59
+ ...extendingFilters
60
+ }
61
+ }, [otherParams, extendingFilters])
62
+
63
+ useEffect(() => {
64
+ console.log("fetching data")
65
+ getData({
66
+ pagination: paginationQuery,
67
+ ...(Object.keys(filters).length > 0 && { filters: filters }),
68
+ ...(Object.keys(searchParams).length > 0 && { search: searchParams }),
69
+ tab: activeTab,
70
+ sortBy: {
71
+ [sortBy || "updatedAt"]: sortDir ? (sortDir === "ascend" ? 1 : -1) : -1,
72
+ }
73
+ }, 'events')
74
+ console.log("data fetched")
75
+ }, [location.search, activeTab, JSON.stringify(extendingFilters)]);
76
+
77
+ console.log({data})
78
+
79
+ const selectFiltersConfig = useMemo(() => {
80
+ return getFiltersConfig({t});
81
+ }, [t]);
82
+
83
+ useEffect(() => {
84
+ setSelectOptions((prev) => ({
85
+ ...prev,
86
+ ...getFilterOptions(options, t),
87
+ }))
88
+ }, [options, t])
89
+
90
+ const handleActiveTabChange = useCallback((value) => {
91
+ setActiveTab(value);
92
+ }, []);
93
+
94
+ return (
95
+ <TablePageWithTabs
96
+ t={t}
97
+ title={t("events")}
98
+ breadCrumbs={breadCrumbs}
99
+ location={location}
100
+ loading={loading}
101
+ goTo={goTo}
102
+ defaultActiveTab={"all"}
103
+ columns={columns}
104
+ data={data}
105
+ checkboxConfig={checkboxConfig}
106
+ APP={APP}
107
+ getApiBaseUrl={getApiBaseUrl}
108
+ selectOptions={selectOptions}
109
+ selectFiltersConfig={selectFiltersConfig}
110
+ getRedirectLink={getRedirectLink}
111
+ filtersConfig={filtersConfig}
112
+ isMobile={isMobile}
113
+ view="events"
114
+ getActiveTab={handleActiveTabChange}
115
+ onDownload={() => {
116
+ console.log("download");
117
+ }}
118
+ drawerTitle={t("Create Events")}
119
+ >
120
+ {({onDrawerClose}) => (
121
+ <EventsCreate
122
+ t={t}
123
+ goTo={goTo}
124
+ user={user}
125
+ APP={APP}
126
+ getApiBaseUrl={getApiBaseUrl}
127
+ getAppHeader={getAppHeader}
128
+ getData={getFormData}
129
+ saveData={saveFormData}
130
+ loading={formLoading}
131
+ onSubmitted={(type, m, data) => {
132
+ if (data.datastakeId) {
133
+ displayMessage(
134
+ type,
135
+ t("affirmations::subject-created-successfully") || m,
136
+ );
137
+ // goTo(`/app/edit/stakeholders/${data.datastakeId}`);
138
+ goTo(`/app/edit/events/${data.datastakeId}`)
139
+ }
140
+ }}
141
+ onCancel={onDrawerClose}
142
+ query={query}
143
+ ajaxForms={ajaxForms}
144
+ changeAjaxForms={changeAjaxForms}
145
+ ajaxOptions={ajaxOptions}
146
+ changeAjaxOptions={changeAjaxOptions}
147
+ formData={formData}
148
+ formValue={formValue}
149
+ form={form}
150
+ />
151
+ )}
152
+ </TablePageWithTabs>
153
+ )
154
+ }
155
+
156
+ export default EventsTable
@@ -121,8 +121,7 @@ const LocationsTable = ({
121
121
  type,
122
122
  t("affirmations::subject-created-successfully") || m,
123
123
  );
124
- // goTo(`/app/edit/stakeholders/${data.datastakeId}`);
125
- goTo('/app/locations')
124
+ goTo(`/app/edit/locations/${data.datastakeId}`);
126
125
  }
127
126
  }}
128
127
  onCancel={onDrawerClose}