@aarhus-university/au-lib-react-components 8.20.2 → 8.80.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.eslintrc.js +44 -0
- package/README.md +19 -20
- package/babel.config.js +7 -0
- package/build/umd/all.css +1 -2
- package/build/umd/all.css.map +1 -1
- package/build/umd/all.js +1 -1
- package/build/umd/all.js.map +1 -1
- package/build/umd/alphabox.js +1 -1
- package/build/umd/alphabox.js.map +1 -1
- package/build/umd/databox.js +1 -6
- package/build/umd/databox.js.map +1 -1
- package/build/umd/diagramme.js +1 -1
- package/build/umd/diagramme.js.map +1 -1
- package/build/umd/flowbox.js +1 -1
- package/build/umd/flowbox.js.map +1 -1
- package/build/umd/universe.js +1 -1
- package/build/umd/universe.js.map +1 -1
- package/package.json +66 -65
- package/src/components/AUAlertComponent.tsx +70 -0
- package/src/components/{AutoSuggestComponent.js → AUAutoSuggestComponent.js} +45 -19
- package/src/components/AUCalendarComponent.tsx +493 -0
- package/src/components/AUContentToggleComponent.tsx +33 -0
- package/src/components/AUDatepickerComponent.tsx +117 -0
- package/src/components/AUMobilePrefixComponent.tsx +15 -0
- package/src/components/{delphinus/AUModalComponent.js → AUModalComponent.tsx} +78 -76
- package/src/components/{form/AUReceiptComponent.js → AUReceiptComponent.tsx} +33 -40
- package/src/components/AUSpinnerComponent.tsx +64 -0
- package/src/components/{delphinus/AUSubNavComponent.js → AUSubNavComponent.tsx} +38 -53
- package/src/components/{form/AUSubmitButtonContainerComponent.js → AUSubmitButtonContainerComponent.tsx} +31 -39
- package/src/components/AUTabbedContentComponent.tsx +145 -0
- package/src/components/{delphinus/AUTableComponent.js → AUTableComponent.tsx} +24 -28
- package/src/components/{delphinus/AUToastComponent.js → AUToastComponent.tsx} +104 -91
- package/src/components/{delphinus/AUToolbarComponent.js → AUToolbarComponent.tsx} +45 -48
- package/src/components/profile/AUProfileActions.js +128 -113
- package/src/components/profile/AUProfileAvatarComponent.js +83 -83
- package/src/components/profile/AUProfileAvatarV2Component.js +91 -0
- package/src/components/profile/AUProfileAvatarV3Component.js +80 -0
- package/src/components/profile/AUProfileContainerComponent.js +283 -285
- package/src/components/profile/AUProfileHooks.js +30 -30
- package/src/components/profile/AUProfileItemComponent.js +54 -54
- package/src/components/profile/AUProfileLanguageComponent.js +131 -131
- package/src/components/profile/AUProfileLoginComponent.js +0 -2
- package/src/components/profile/AUProfileMailComponent.js +307 -299
- package/src/components/profile/AUProfileMobileComponent.js +164 -164
- package/src/components/profile/AUProfileNameComponent.js +253 -253
- package/src/components/profile/AUProfileNextOfKinComponent.js +216 -216
- package/src/components/profile/AUProfileReducer.js +230 -210
- package/src/components/profile/AUProfileWidgetComponent.js +95 -95
- package/src/components/profile/AUProfileWidgetV2Component.js +116 -0
- package/src/components/profile/AUProfileWidgetV3Component.js +130 -0
- package/src/components/wrapping/AUEmbedComponent.js +47 -47
- package/src/{components → layout-2016/components}/alphabox/AlphaBoxComponent.js +29 -28
- package/src/{components → layout-2016/components}/alphabox/AlphaBoxContentComponent.js +25 -14
- package/src/{components → layout-2016/components/common}/AUCollapsibleComponent.js +1 -22
- package/src/{components → layout-2016/components/common}/AUSpinnerComponent.js +2 -24
- package/src/{components → layout-2016/components}/databox/DataBoxAlphabetComponent.js +1 -1
- package/src/{components → layout-2016/components}/databox/DataBoxAssociationComponent.js +2 -2
- package/src/{components → layout-2016/components}/databox/DataBoxButtonComponent.js +7 -3
- package/src/{components → layout-2016/components}/databox/DataBoxComponent.js +2 -2
- package/src/{components → layout-2016/components}/databox/DataBoxGroupingComponent.js +2 -0
- package/src/{components → layout-2016/components}/databox/DataBoxSearchResultComponent.js +1 -5
- package/src/{components → layout-2016/components}/databox/DataBoxStackedAssociationComponent.js +1 -5
- package/src/{components → layout-2016/components}/databox/DataBoxSuggestionComponent.js +0 -0
- package/src/{components → layout-2016/components/diagramme}/AUDiagrammeComponent.js +5 -6
- package/src/{components → layout-2016/components}/flowbox/FlowBoxComponent.js +8 -8
- package/src/{components → layout-2016/components}/flowbox/FlowBoxPhoneComponent.js +3 -5
- package/src/{components → layout-2016/components}/profile/AUProfileAvatar2016Component.js +6 -2
- package/src/{components → layout-2016/components}/universe/StaffTopComponent.js +4 -3
- package/src/{components → layout-2016/components}/universe/StudentTopComponent.js +0 -0
- package/src/{components → layout-2016/components}/universe/UniverseContainerComponent.js +11 -8
- package/src/layout-2016/lib/all.js +3 -0
- package/src/{lib → layout-2016/lib}/au-alphabox.js +1 -3
- package/src/{lib → layout-2016/lib}/au-databox.js +6 -9
- package/src/{lib → layout-2016/lib}/au-diagramme.js +2 -4
- package/src/{lib → layout-2016/lib}/au-flowbox.js +1 -3
- package/src/{lib → layout-2016/lib}/universe.js +0 -0
- package/src/lib/{helpers.js → helpers.ts} +40 -66
- package/src/{components/delphinus/hooks.js → lib/hooks.ts} +33 -26
- package/src/lib/{i18n.js → i18n.ts} +600 -595
- package/src/lib/tracking.ts +69 -0
- package/src/lib/{wrapping.js → wrapping.ts} +21 -16
- package/src/styles/_settings.scss +11 -11
- package/src/styles/alphabox.scss +222 -209
- package/src/styles/app.scss +7 -12
- package/src/styles/autosuggest.scss +57 -57
- package/src/styles/databox.scss +563 -563
- package/src/styles/diagramme.scss +119 -119
- package/src/styles/flowbox.scss +72 -72
- package/src/styles/maps.scss +396 -0
- package/tsconfig.json +47 -0
- package/types/common/interfaces.d.ts +64 -0
- package/types/common/main.d.ts +4 -0
- package/types/common/package.json +5 -0
- package/types/common/payloads.d.ts +0 -0
- package/types/common/props.d.ts +138 -0
- package/webpack.config.js +89 -0
- package/.eslintrc +0 -19
- package/DOCUMENTATION.md +0 -369
- package/build/cjs/auAuth.js +0 -2
- package/build/cjs/auAuth.js.map +0 -1
- package/build/dev.html +0 -329
- package/build/umd/auAuth.js +0 -2
- package/build/umd/auAuth.js.map +0 -1
- package/build/umd/news.js +0 -2
- package/build/umd/news.js.map +0 -1
- package/src/all.js +0 -3
- package/src/app.js +0 -263
- package/src/components/AUAlertComponent.js +0 -158
- package/src/components/AUAmountComponent.js +0 -84
- package/src/components/AUBannerComponent.js +0 -99
- package/src/components/AUCalendarComponent.js +0 -393
- package/src/components/AUDatepickerComponent.js +0 -105
- package/src/components/AUFilterCheckboxComponent.js +0 -122
- package/src/components/AUFocusComponent.js +0 -55
- package/src/components/AUModalComponent.js +0 -94
- package/src/components/AUPaginationComponent.js +0 -103
- package/src/components/context/AUUserContextComponent.js +0 -91
- package/src/components/context/ImpersonateComponent.js +0 -54
- package/src/components/delphinus/AUCalendarComponent.js +0 -422
- package/src/components/delphinus/AUContentToggleComponent.js +0 -32
- package/src/components/delphinus/AUDatepickerComponent.js +0 -113
- package/src/components/delphinus/AULoginComponent.js +0 -65
- package/src/components/delphinus/AUSpinnerComponent.js +0 -114
- package/src/components/delphinus/AUTabbedContentComponent.js +0 -53
- package/src/components/form/AUMobilePrefixComponent.js +0 -18
- package/src/components/news/EventLayout1Component.js +0 -94
- package/src/components/news/EventLayout2Component.js +0 -90
- package/src/components/news/EventLayout3Component.js +0 -68
- package/src/components/news/NewsCategoriesComponent.js +0 -21
- package/src/components/news/NewsCollageBannerComponent.js +0 -71
- package/src/components/news/NewsColumnsComponent.js +0 -125
- package/src/components/news/NewsLanguageChangeComponent.js +0 -74
- package/src/components/news/NewsLayout1Component.js +0 -80
- package/src/components/news/NewsLayout2Component.js +0 -80
- package/src/components/news/NewsLayout3Component.js +0 -81
- package/src/components/news/NewsLayout4Component.js +0 -80
- package/src/components/news/NewsLayout5Component.js +0 -61
- package/src/components/news/NewsLayout6Component.js +0 -55
- package/src/components/news/NewsLayout7Component.js +0 -58
- package/src/components/news/NewsLayout8Component.js +0 -57
- package/src/components/news/NewsListComponent.js +0 -291
- package/src/components/news/NewsPopUpComponent.js +0 -591
- package/src/components/news/NewsRSSComponent.js +0 -74
- package/src/components/news/NewsSocialComponent.js +0 -104
- package/src/components/news/NewsSubHeaderComponent.js +0 -19
- package/src/components/password/AUChangePasswordComponent.js +0 -177
- package/src/components/password/AUCurrentPasswordComponent.js +0 -72
- package/src/components/password/AUNewPasswordComponent.js +0 -143
- package/src/components/password/AUPasswordActions.js +0 -101
- package/src/components/password/AUPasswordHooks.js +0 -47
- package/src/components/password/AUPasswordReducer.js +0 -78
- package/src/components/password/AUPasswordRequirementsComponent.js +0 -29
- package/src/config/webpack.cjs.config.js +0 -75
- package/src/config/webpack.dev.config.js +0 -61
- package/src/config/webpack.umd.config.js +0 -107
- package/src/index.js +0 -6
- package/src/lib/au-auth.js +0 -221
- package/src/lib/au-news.js +0 -306
- package/src/lib/menu.js +0 -10
- package/src/lib/urlHandler.js +0 -63
- package/src/lib/validation.js +0 -181
- package/src/styles/alert.scss +0 -39
- package/src/styles/calendar.scss +0 -112
- package/src/styles/filtercheckbox.scss +0 -5
- package/src/styles/modal.scss +0 -35
- package/src/styles/pagination.scss +0 -11
- package/src/styles/spinner.scss +0 -30
package/src/{components → layout-2016/components}/databox/DataBoxStackedAssociationComponent.js
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import PropTypes from 'prop-types';
|
|
3
|
-
import { sortAlphaObj } from '
|
|
3
|
+
import { sortAlphaObj } from '../../../lib/helpers';
|
|
4
4
|
|
|
5
5
|
const DataBoxStackedAssociationComponent = (props) => {
|
|
6
6
|
const { assoc } = props;
|
|
@@ -44,10 +44,6 @@ const DataBoxStackedAssociationComponent = (props) => {
|
|
|
44
44
|
);
|
|
45
45
|
};
|
|
46
46
|
|
|
47
|
-
DataBoxStackedAssociationComponent.defaultProps = {
|
|
48
|
-
|
|
49
|
-
};
|
|
50
|
-
|
|
51
47
|
DataBoxStackedAssociationComponent.propTypes = {
|
|
52
48
|
assoc: PropTypes.shape({
|
|
53
49
|
items: PropTypes.arrayOf(PropTypes.shape({})).isRequired,
|
|
File without changes
|
|
@@ -2,7 +2,6 @@
|
|
|
2
2
|
/* eslint no-mixed-operators: 0 */
|
|
3
3
|
import React from 'react';
|
|
4
4
|
import PropTypes from 'prop-types';
|
|
5
|
-
import axios from 'axios';
|
|
6
5
|
|
|
7
6
|
const diagrammeLabels = {
|
|
8
7
|
da: {
|
|
@@ -82,16 +81,16 @@ class AUDiagrammeComponent extends React.PureComponent {
|
|
|
82
81
|
response.lines.forEach((value, key) => {
|
|
83
82
|
promises.push(new Promise((resolve) => {
|
|
84
83
|
const url = `https://eddiprod.au.dk/EDDI/webservices/StudieoversigtService2.cfc?method=GetStudiediagramData&lang=en&allowOrigin=true&linjeid=${value.id}`;
|
|
85
|
-
|
|
86
|
-
const periodType =
|
|
84
|
+
fetch(url).then((promise) => promise.json()).then((data) => {
|
|
85
|
+
const periodType = data.DiagramMetaData.DATA[0] ? data.DiagramMetaData.DATA[0][3] : '';
|
|
87
86
|
const node = {
|
|
88
87
|
name: lang === 'da' ? value.name : value.nameEnglish,
|
|
89
88
|
periodType,
|
|
90
|
-
table: AUDiagrammeComponent.diagrammeParse(
|
|
91
|
-
list: AUDiagrammeComponent.diagrammeParse(
|
|
89
|
+
table: AUDiagrammeComponent.diagrammeParse(data, lang),
|
|
90
|
+
list: AUDiagrammeComponent.diagrammeParse(data, lang, 'list'),
|
|
92
91
|
};
|
|
93
92
|
nodes[key] = node;
|
|
94
|
-
resolve(
|
|
93
|
+
resolve(data);
|
|
95
94
|
});
|
|
96
95
|
}));
|
|
97
96
|
});
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
import React from 'react';
|
|
6
6
|
import PropTypes from 'prop-types';
|
|
7
7
|
import FlowBoxPhoneComponent from './FlowBoxPhoneComponent';
|
|
8
|
-
import { flowboxLabels as labels } from '
|
|
8
|
+
import { flowboxLabels as labels } from '../../../lib/i18n';
|
|
9
9
|
|
|
10
10
|
class FlowBoxComponent extends React.Component {
|
|
11
11
|
constructor(props) {
|
|
@@ -20,23 +20,23 @@ class FlowBoxComponent extends React.Component {
|
|
|
20
20
|
this.handleSelectChange = this.handleSelectChange.bind(this);
|
|
21
21
|
}
|
|
22
22
|
|
|
23
|
-
|
|
23
|
+
handleSelectChange(event) {
|
|
24
|
+
const { node } = this.state;
|
|
25
|
+
const child = node.children.find((n) => n.name === event.target.value);
|
|
24
26
|
this.setState({
|
|
25
27
|
node: child,
|
|
26
28
|
});
|
|
27
29
|
}
|
|
28
30
|
|
|
29
|
-
|
|
31
|
+
nextNode(child) {
|
|
30
32
|
this.setState({
|
|
31
|
-
node:
|
|
33
|
+
node: child,
|
|
32
34
|
});
|
|
33
35
|
}
|
|
34
36
|
|
|
35
|
-
|
|
36
|
-
const { node } = this.state;
|
|
37
|
-
const child = node.children.find((n) => n.name === event.target.value);
|
|
37
|
+
prevNode(node) {
|
|
38
38
|
this.setState({
|
|
39
|
-
node:
|
|
39
|
+
node: node.parent,
|
|
40
40
|
});
|
|
41
41
|
}
|
|
42
42
|
|
|
@@ -1,9 +1,8 @@
|
|
|
1
1
|
/* eslint-env browser */
|
|
2
2
|
import React from 'react';
|
|
3
3
|
import PropTypes from 'prop-types';
|
|
4
|
-
import
|
|
5
|
-
import
|
|
6
|
-
import { flowboxLabels as labels } from '../../lib/i18n';
|
|
4
|
+
import AUSpinnerComponent from '../common/AUSpinnerComponent';
|
|
5
|
+
import { flowboxLabels as labels } from '../../../lib/i18n';
|
|
7
6
|
|
|
8
7
|
class FlowBoxPhoneComponent extends React.Component {
|
|
9
8
|
constructor(props) {
|
|
@@ -16,8 +15,7 @@ class FlowBoxPhoneComponent extends React.Component {
|
|
|
16
15
|
componentDidMount() {
|
|
17
16
|
const { phone } = this.props;
|
|
18
17
|
const iPureUrl = `https://ipure.nfit.au.dk/searchPeople.php?mode=json&q=${phone}`;
|
|
19
|
-
|
|
20
|
-
const persons = promise.data;
|
|
18
|
+
fetch(iPureUrl).then((promise) => promise.json()).then((persons) => {
|
|
21
19
|
this.setState({
|
|
22
20
|
persons,
|
|
23
21
|
}, () => {
|
|
@@ -1,8 +1,11 @@
|
|
|
1
1
|
/* eslint-env browser */
|
|
2
2
|
import React from 'react';
|
|
3
3
|
import PropTypes from 'prop-types';
|
|
4
|
-
import AUProfileWidgetComponent from '
|
|
5
|
-
|
|
4
|
+
import AUProfileWidgetComponent from '../../../components/profile/AUProfileWidgetComponent';
|
|
5
|
+
|
|
6
|
+
// TODO: Re-implement portal context i staff portal and mitstudie
|
|
7
|
+
// before upgrading this lib-component!
|
|
8
|
+
const AUUserContextComponent = null;
|
|
6
9
|
|
|
7
10
|
const AUProfileAvatar2016Component = ({
|
|
8
11
|
lang,
|
|
@@ -63,6 +66,7 @@ const AUProfileAvatar2016Component = ({
|
|
|
63
66
|
onLoad(userContext);
|
|
64
67
|
}}
|
|
65
68
|
handleError={(status, json) => {
|
|
69
|
+
// eslint-disable-next-line no-console
|
|
66
70
|
console.log(status, json);
|
|
67
71
|
}}
|
|
68
72
|
spinner={false}
|
|
@@ -6,10 +6,10 @@
|
|
|
6
6
|
import React from 'react';
|
|
7
7
|
import ReactDOM from 'react-dom';
|
|
8
8
|
import PropTypes from 'prop-types';
|
|
9
|
-
import AUCollapsibleComponent from '../AUCollapsibleComponent';
|
|
10
|
-
import AUProfileLoginComponent from '
|
|
9
|
+
import AUCollapsibleComponent from '../common/AUCollapsibleComponent';
|
|
10
|
+
import AUProfileLoginComponent from '../../../components/profile/AUProfileLoginComponent';
|
|
11
11
|
import AUProfileAvatar2016Component from '../profile/AUProfileAvatar2016Component';
|
|
12
|
-
import { getCookie, setCookie } from '
|
|
12
|
+
import { getCookie, setCookie } from '../../../lib/helpers';
|
|
13
13
|
|
|
14
14
|
const parseBurgerLinks = (elements) => {
|
|
15
15
|
const links = [];
|
|
@@ -94,6 +94,7 @@ class StaffTopComponent extends React.Component {
|
|
|
94
94
|
onLoad({ ...user, ...{ auId: json.auId } });
|
|
95
95
|
});
|
|
96
96
|
}).catch((err) => {
|
|
97
|
+
// eslint-disable-next-line no-console
|
|
97
98
|
console.log(err);
|
|
98
99
|
});
|
|
99
100
|
}
|
|
File without changes
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
/* eslint-env browser */
|
|
2
2
|
import React, { useState } from 'react';
|
|
3
|
-
import
|
|
4
|
-
import { universeLabels, profileLabels } from '../../lib/i18n';
|
|
3
|
+
import { universeLabels, profileLabels } from '../../../lib/i18n';
|
|
5
4
|
import StaffTopComponent from './StaffTopComponent';
|
|
6
5
|
import StudentTopComponent from './StudentTopComponent';
|
|
7
6
|
|
|
@@ -26,9 +25,11 @@ const UniverseContainerComponent = () => {
|
|
|
26
25
|
lang={lang}
|
|
27
26
|
user={user}
|
|
28
27
|
promiseHandler={(callback) => {
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
28
|
+
fetch(universeGlobalContentPath).then(
|
|
29
|
+
(promise) => promise.json(),
|
|
30
|
+
).then(
|
|
31
|
+
(data) => callback(data),
|
|
32
|
+
);
|
|
32
33
|
}}
|
|
33
34
|
onLoad={(context) => {
|
|
34
35
|
setUser(context);
|
|
@@ -45,9 +46,11 @@ const UniverseContainerComponent = () => {
|
|
|
45
46
|
lang={lang}
|
|
46
47
|
user={user}
|
|
47
48
|
promiseHandler={(callback) => {
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
49
|
+
fetch(universeGlobalContentPath).then(
|
|
50
|
+
(promise) => promise.json(),
|
|
51
|
+
).then(
|
|
52
|
+
(data) => callback(data),
|
|
53
|
+
);
|
|
51
54
|
}}
|
|
52
55
|
universeLabels={universeLabels}
|
|
53
56
|
profileLabels={profileLabels}
|
|
@@ -89,9 +89,7 @@ class AUAlphabox {
|
|
|
89
89
|
const mountNode = document.querySelector(box.config.container);
|
|
90
90
|
const visible = mountNode && getComputedStyle(mountNode).visibility !== 'hidden';
|
|
91
91
|
if (visible) {
|
|
92
|
-
ReactDOM.render(
|
|
93
|
-
<AlphaBoxComponent box={box} />, mountNode,
|
|
94
|
-
);
|
|
92
|
+
ReactDOM.render(<AlphaBoxComponent box={box} />, mountNode);
|
|
95
93
|
box.loaded = true;
|
|
96
94
|
}
|
|
97
95
|
}
|
|
@@ -6,7 +6,6 @@
|
|
|
6
6
|
/* eslint-env browser */
|
|
7
7
|
import React from 'react';
|
|
8
8
|
import ReactDOM from 'react-dom';
|
|
9
|
-
import axios from 'axios';
|
|
10
9
|
import DataBoxComponent from '../components/databox/DataBoxComponent';
|
|
11
10
|
|
|
12
11
|
const defaultOptions = {
|
|
@@ -58,8 +57,8 @@ class AUDataboxParser {
|
|
|
58
57
|
const promises = [];
|
|
59
58
|
sourceArr.forEach((s) => {
|
|
60
59
|
promises.push(new Promise((resolve) => {
|
|
61
|
-
|
|
62
|
-
resolve(
|
|
60
|
+
fetch(s).then((promise) => promise.json()).then((data) => {
|
|
61
|
+
resolve(data);
|
|
63
62
|
});
|
|
64
63
|
}));
|
|
65
64
|
});
|
|
@@ -380,12 +379,10 @@ class AUDatabox {
|
|
|
380
379
|
box.config.stacked = true;
|
|
381
380
|
}
|
|
382
381
|
if (visible) {
|
|
383
|
-
ReactDOM.render(
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
/>, mountNode,
|
|
388
|
-
);
|
|
382
|
+
ReactDOM.render(<DataBoxComponent
|
|
383
|
+
box={box}
|
|
384
|
+
parse={parser[box.data.mode]}
|
|
385
|
+
/>, mountNode);
|
|
389
386
|
box.loaded = true;
|
|
390
387
|
}
|
|
391
388
|
|
|
@@ -4,8 +4,7 @@
|
|
|
4
4
|
/* eslint-env browser */
|
|
5
5
|
import React from 'react';
|
|
6
6
|
import ReactDOM from 'react-dom';
|
|
7
|
-
import
|
|
8
|
-
import AUDiagrammeComponent from '../components/AUDiagrammeComponent';
|
|
7
|
+
import AUDiagrammeComponent from '../components/diagramme/AUDiagrammeComponent';
|
|
9
8
|
|
|
10
9
|
const defaultOptions = {
|
|
11
10
|
config: {
|
|
@@ -64,8 +63,7 @@ class AUDiagramme {
|
|
|
64
63
|
table.id = i;
|
|
65
64
|
AUDiagramme.mergeOptions(table);
|
|
66
65
|
const url = `https://eddiprod.au.dk/EDDI/webservices/StudieoversigtService2.cfc?method=getLinjeListByDokordningId&tjekForVisningIstudieDiagram=true&allowOrigin=true&dokordningId=${table.config.courseID}`;
|
|
67
|
-
|
|
68
|
-
const { data } = promise;
|
|
66
|
+
fetch(url).then((promise) => promise.json()).then((data) => {
|
|
69
67
|
const mountNode = document.querySelector(table.config.container);
|
|
70
68
|
if (mountNode) {
|
|
71
69
|
ReactDOM.render(
|
|
@@ -85,9 +85,7 @@ class AUFlowbox {
|
|
|
85
85
|
};
|
|
86
86
|
AUFlowbox.parse(box);
|
|
87
87
|
const mountNode = document.querySelector(box.config.container);
|
|
88
|
-
ReactDOM.render(
|
|
89
|
-
<FlowBoxComponent box={box} lang={this.lang} />, mountNode,
|
|
90
|
-
);
|
|
88
|
+
ReactDOM.render(<FlowBoxComponent box={box} lang={this.lang} />, mountNode);
|
|
91
89
|
}
|
|
92
90
|
}
|
|
93
91
|
}
|
|
File without changes
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
/* eslint-env browser */
|
|
2
2
|
/* NO IMPORTS! */
|
|
3
3
|
|
|
4
|
-
|
|
4
|
+
// eslint-disable-next-line no-control-regex
|
|
5
|
+
const emailRegex = /(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\])/;
|
|
5
6
|
|
|
6
7
|
const sortAlphaObj = (a, b) => {
|
|
7
8
|
if (typeof a.name !== 'undefined' && typeof b.name !== 'undefined') {
|
|
@@ -10,7 +11,7 @@ const sortAlphaObj = (a, b) => {
|
|
|
10
11
|
return 0;
|
|
11
12
|
};
|
|
12
13
|
|
|
13
|
-
const isElementInViewport = (element) => {
|
|
14
|
+
const isElementInViewport = (element: HTMLElement): boolean => {
|
|
14
15
|
if (element === null) {
|
|
15
16
|
return false;
|
|
16
17
|
}
|
|
@@ -23,7 +24,7 @@ const isElementInViewport = (element) => {
|
|
|
23
24
|
&& rect.top < (window.innerHeight || document.documentElement.clientHeight);
|
|
24
25
|
};
|
|
25
26
|
|
|
26
|
-
const isElementPartlyInViewport = (element) => {
|
|
27
|
+
const isElementPartlyInViewport = (element: HTMLElement): boolean => {
|
|
27
28
|
let top = element.offsetTop;
|
|
28
29
|
let left = element.offsetLeft;
|
|
29
30
|
const width = element.offsetWidth;
|
|
@@ -31,7 +32,7 @@ const isElementPartlyInViewport = (element) => {
|
|
|
31
32
|
|
|
32
33
|
let offsetElement = element;
|
|
33
34
|
while (offsetElement.offsetParent) {
|
|
34
|
-
offsetElement = element.offsetParent;
|
|
35
|
+
offsetElement = element.offsetParent as HTMLElement;
|
|
35
36
|
top += element.offsetTop;
|
|
36
37
|
left += element.offsetLeft;
|
|
37
38
|
}
|
|
@@ -44,7 +45,13 @@ const isElementPartlyInViewport = (element) => {
|
|
|
44
45
|
);
|
|
45
46
|
};
|
|
46
47
|
|
|
47
|
-
const setCookie = (
|
|
48
|
+
const setCookie = (
|
|
49
|
+
cookieName: string,
|
|
50
|
+
value: string,
|
|
51
|
+
maxAge: number | null = null,
|
|
52
|
+
exdays: number | null = null,
|
|
53
|
+
path = ';path=/;domain=au.dk',
|
|
54
|
+
): void => {
|
|
48
55
|
let cookieValue = encodeURI(value);
|
|
49
56
|
if (exdays != null) {
|
|
50
57
|
const exdate = new Date();
|
|
@@ -57,8 +64,8 @@ const setCookie = (cookieName, value, maxAge = null, exdays = null, path = ';pat
|
|
|
57
64
|
document.cookie = `${cookieName}=${cookieValue}${path}`;
|
|
58
65
|
};
|
|
59
66
|
|
|
60
|
-
const getCookie = (cookieName) => {
|
|
61
|
-
let cookieValue = document.cookie;
|
|
67
|
+
const getCookie = (cookieName: string): string | null => {
|
|
68
|
+
let cookieValue: string | null = document.cookie;
|
|
62
69
|
let cookieStart = cookieValue.indexOf(` ${cookieName}=`);
|
|
63
70
|
if (cookieStart === -1) {
|
|
64
71
|
cookieStart = cookieValue.indexOf(`${cookieName}=`);
|
|
@@ -76,7 +83,7 @@ const getCookie = (cookieName) => {
|
|
|
76
83
|
return cookieValue;
|
|
77
84
|
};
|
|
78
85
|
|
|
79
|
-
const addToSessionStorage = (key, data) => {
|
|
86
|
+
const addToSessionStorage = (key: string, data: unknown): unknown => {
|
|
80
87
|
if (window.sessionStorage) {
|
|
81
88
|
sessionStorage.setItem(key, JSON.stringify(data));
|
|
82
89
|
}
|
|
@@ -84,7 +91,7 @@ const addToSessionStorage = (key, data) => {
|
|
|
84
91
|
return data;
|
|
85
92
|
};
|
|
86
93
|
|
|
87
|
-
const getFromSessionStorage = (key) => {
|
|
94
|
+
const getFromSessionStorage = (key: string): unknown | null => {
|
|
88
95
|
if (window.sessionStorage) {
|
|
89
96
|
const data = sessionStorage.getItem(key);
|
|
90
97
|
if (data) {
|
|
@@ -95,7 +102,7 @@ const getFromSessionStorage = (key) => {
|
|
|
95
102
|
return null;
|
|
96
103
|
};
|
|
97
104
|
|
|
98
|
-
const addToLocalStorage = (key, data) => {
|
|
105
|
+
const addToLocalStorage = (key: string, data: unknown): unknown => {
|
|
99
106
|
if (window.localStorage) {
|
|
100
107
|
localStorage.setItem(key, JSON.stringify(data));
|
|
101
108
|
}
|
|
@@ -103,7 +110,7 @@ const addToLocalStorage = (key, data) => {
|
|
|
103
110
|
return data;
|
|
104
111
|
};
|
|
105
112
|
|
|
106
|
-
const getFromLocalStorage = (key) => {
|
|
113
|
+
const getFromLocalStorage = (key: string): unknown | null => {
|
|
107
114
|
if (window.localStorage) {
|
|
108
115
|
const data = localStorage.getItem(key);
|
|
109
116
|
if (data) {
|
|
@@ -114,35 +121,8 @@ const getFromLocalStorage = (key) => {
|
|
|
114
121
|
return null;
|
|
115
122
|
};
|
|
116
123
|
|
|
117
|
-
const setContextInSession = (key, data, clearPrevious = true) => {
|
|
118
|
-
if (clearPrevious) {
|
|
119
|
-
Object.entries(window.sessionStorage).forEach((entry) => {
|
|
120
|
-
const entryKey = entry[0];
|
|
121
|
-
if (entryKey.includes('user-context')) {
|
|
122
|
-
window.sessionStorage.removeItem(entryKey);
|
|
123
|
-
}
|
|
124
|
-
});
|
|
125
|
-
}
|
|
126
|
-
window.sessionStorage.setItem(`user-context-${key}`, data);
|
|
127
|
-
};
|
|
128
|
-
|
|
129
|
-
const getContextFromSession = (key = '', any = false) => {
|
|
130
|
-
if (any) {
|
|
131
|
-
let foundContext = null;
|
|
132
|
-
Object.entries(window.sessionStorage).forEach((entry) => {
|
|
133
|
-
const entryKey = entry[0];
|
|
134
|
-
if (entryKey.includes('user-context')) {
|
|
135
|
-
foundContext = window.sessionStorage.getItem(entryKey);
|
|
136
|
-
}
|
|
137
|
-
});
|
|
138
|
-
return foundContext;
|
|
139
|
-
}
|
|
140
|
-
|
|
141
|
-
return window.sessionStorage.getItem(`user-context-${key}`);
|
|
142
|
-
};
|
|
143
|
-
|
|
144
124
|
// Credits: http://blog.vishalon.net/index.php/javascript-getting-and-setting-caret-position-in-textarea/
|
|
145
|
-
const setCaretPosition = (element, pos) => {
|
|
125
|
+
const setCaretPosition = (element: HTMLInputElement, pos: number): void => {
|
|
146
126
|
// Modern browsers
|
|
147
127
|
if (element && element.setSelectionRange) {
|
|
148
128
|
element.focus();
|
|
@@ -150,23 +130,26 @@ const setCaretPosition = (element, pos) => {
|
|
|
150
130
|
}
|
|
151
131
|
};
|
|
152
132
|
|
|
153
|
-
const splitPhoneNumber = (countryCodes, phoneNumber) => {
|
|
154
|
-
const countryCodeFound = (code) => countryCodes.filter(
|
|
133
|
+
const splitPhoneNumber = (countryCodes: ICountryCode[], phoneNumber: string): IPhoneNumber => {
|
|
134
|
+
const countryCodeFound = (code: string) => countryCodes.filter(
|
|
155
135
|
(x) => x.code === parseInt(code, 10),
|
|
156
136
|
).length > 0;
|
|
157
137
|
|
|
158
|
-
const findPrefix = () => {
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
138
|
+
const findPrefix = (): string => {
|
|
139
|
+
if (countryCodes.length > 0) {
|
|
140
|
+
const skip = '';
|
|
141
|
+
let count = 1;
|
|
142
|
+
let prefix = countryCodes.find((x) => x.important)?.code;
|
|
143
|
+
while (count < phoneNumber.length) {
|
|
144
|
+
const split = phoneNumber.substring(skip.length, skip.length + count);
|
|
145
|
+
if (countryCodeFound(split)) {
|
|
146
|
+
prefix = parseInt(split, 10);
|
|
147
|
+
}
|
|
148
|
+
count += 1;
|
|
166
149
|
}
|
|
167
|
-
|
|
150
|
+
return skip + prefix;
|
|
168
151
|
}
|
|
169
|
-
return
|
|
152
|
+
return '';
|
|
170
153
|
};
|
|
171
154
|
|
|
172
155
|
const prefix = findPrefix();
|
|
@@ -176,25 +159,21 @@ const splitPhoneNumber = (countryCodes, phoneNumber) => {
|
|
|
176
159
|
};
|
|
177
160
|
};
|
|
178
161
|
|
|
179
|
-
const prettyPrintPhone = (countryCodes, phone) => {
|
|
162
|
+
const prettyPrintPhone = (countryCodes: ICountryCode[], phone: string) => {
|
|
180
163
|
if (phone) {
|
|
181
164
|
const { prefix, number } = splitPhoneNumber(countryCodes, phone);
|
|
182
|
-
|
|
165
|
+
if (prefix) {
|
|
166
|
+
return `${prefix} ${number?.match(/\d{1,2}/g)?.join(' ')}`;
|
|
167
|
+
}
|
|
168
|
+
return number?.match(/\d{1,2}/g)?.join(' ');
|
|
183
169
|
}
|
|
184
170
|
return '';
|
|
185
171
|
};
|
|
186
172
|
|
|
187
|
-
const getAccessToken = (auAuth, serviceScope, callback) => {
|
|
188
|
-
auAuth.getAccessToken([serviceScope]).then((accessToken) => {
|
|
189
|
-
callback(accessToken.accessToken);
|
|
190
|
-
});
|
|
191
|
-
};
|
|
192
|
-
|
|
193
|
-
const parseError = (errorArray) => errorArray.map((e) => e.errorMessage).join(', ');
|
|
194
|
-
|
|
195
173
|
const scrollTo = (x = 0, y = 0) => window.scrollTo(x, y);
|
|
196
174
|
|
|
197
175
|
export {
|
|
176
|
+
emailRegex,
|
|
198
177
|
sortAlphaObj,
|
|
199
178
|
isElementInViewport,
|
|
200
179
|
isElementPartlyInViewport,
|
|
@@ -205,12 +184,7 @@ export {
|
|
|
205
184
|
addToSessionStorage,
|
|
206
185
|
getFromSessionStorage,
|
|
207
186
|
setCaretPosition,
|
|
208
|
-
getAccessToken,
|
|
209
|
-
serviceScopeProfile,
|
|
210
187
|
splitPhoneNumber,
|
|
211
188
|
prettyPrintPhone,
|
|
212
|
-
parseError,
|
|
213
189
|
scrollTo,
|
|
214
|
-
setContextInSession,
|
|
215
|
-
getContextFromSession,
|
|
216
190
|
};
|
|
@@ -1,26 +1,33 @@
|
|
|
1
|
-
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
};
|
|
1
|
+
/* eslint-disable import/prefer-default-export */
|
|
2
|
+
import { useState, useEffect } from 'react';
|
|
3
|
+
import { showModal, hideModal } from '@aarhus-university/au-designsystem-delphinus/source/js/components/modal-view';
|
|
4
|
+
|
|
5
|
+
const useModal = (
|
|
6
|
+
domId: string,
|
|
7
|
+
initialState: boolean,
|
|
8
|
+
showCondition = true,
|
|
9
|
+
hideCondition = false,
|
|
10
|
+
closeable = true,
|
|
11
|
+
): [IModal, (modal: IModal) => void] => {
|
|
12
|
+
const [modal, setModal] = useState<IModal>({ modal: initialState, sender: null });
|
|
13
|
+
|
|
14
|
+
useEffect(() => {
|
|
15
|
+
if (modal.modal && modal.sender && showCondition) {
|
|
16
|
+
showModal(domId, modal.sender, () => {
|
|
17
|
+
setModal({ modal: false, sender: null });
|
|
18
|
+
}, closeable);
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
if (modal.modal && modal.sender && hideCondition) {
|
|
22
|
+
hideModal(domId, modal.sender, () => {
|
|
23
|
+
setModal({ modal: false, sender: null });
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
});
|
|
27
|
+
|
|
28
|
+
return [modal, setModal];
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
export {
|
|
32
|
+
useModal,
|
|
33
|
+
};
|