@aarhus-university/au-lib-react-components 8.20.2 → 8.82.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.tsx +42 -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 → AUProfileLoginComponent.tsx} +3 -18
- 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.tsx +122 -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} +41 -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 +91 -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 +165 -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,14 @@ const isElementPartlyInViewport = (element) => {
|
|
|
44
45
|
);
|
|
45
46
|
};
|
|
46
47
|
|
|
47
|
-
const setCookie = (
|
|
48
|
+
const setCookie = (
|
|
49
|
+
cookieName: string,
|
|
50
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
51
|
+
value: any,
|
|
52
|
+
maxAge: number | null = null,
|
|
53
|
+
exdays: number | null = null,
|
|
54
|
+
path = ';path=/;domain=au.dk',
|
|
55
|
+
): void => {
|
|
48
56
|
let cookieValue = encodeURI(value);
|
|
49
57
|
if (exdays != null) {
|
|
50
58
|
const exdate = new Date();
|
|
@@ -57,8 +65,8 @@ const setCookie = (cookieName, value, maxAge = null, exdays = null, path = ';pat
|
|
|
57
65
|
document.cookie = `${cookieName}=${cookieValue}${path}`;
|
|
58
66
|
};
|
|
59
67
|
|
|
60
|
-
const getCookie = (cookieName) => {
|
|
61
|
-
let cookieValue = document.cookie;
|
|
68
|
+
const getCookie = (cookieName: string): string | null => {
|
|
69
|
+
let cookieValue: string | null = document.cookie;
|
|
62
70
|
let cookieStart = cookieValue.indexOf(` ${cookieName}=`);
|
|
63
71
|
if (cookieStart === -1) {
|
|
64
72
|
cookieStart = cookieValue.indexOf(`${cookieName}=`);
|
|
@@ -76,7 +84,7 @@ const getCookie = (cookieName) => {
|
|
|
76
84
|
return cookieValue;
|
|
77
85
|
};
|
|
78
86
|
|
|
79
|
-
const addToSessionStorage = (key, data) => {
|
|
87
|
+
const addToSessionStorage = (key: string, data: unknown): unknown => {
|
|
80
88
|
if (window.sessionStorage) {
|
|
81
89
|
sessionStorage.setItem(key, JSON.stringify(data));
|
|
82
90
|
}
|
|
@@ -84,7 +92,7 @@ const addToSessionStorage = (key, data) => {
|
|
|
84
92
|
return data;
|
|
85
93
|
};
|
|
86
94
|
|
|
87
|
-
const getFromSessionStorage = (key) => {
|
|
95
|
+
const getFromSessionStorage = (key: string): unknown | null => {
|
|
88
96
|
if (window.sessionStorage) {
|
|
89
97
|
const data = sessionStorage.getItem(key);
|
|
90
98
|
if (data) {
|
|
@@ -95,7 +103,7 @@ const getFromSessionStorage = (key) => {
|
|
|
95
103
|
return null;
|
|
96
104
|
};
|
|
97
105
|
|
|
98
|
-
const addToLocalStorage = (key, data) => {
|
|
106
|
+
const addToLocalStorage = (key: string, data: unknown): unknown => {
|
|
99
107
|
if (window.localStorage) {
|
|
100
108
|
localStorage.setItem(key, JSON.stringify(data));
|
|
101
109
|
}
|
|
@@ -103,7 +111,7 @@ const addToLocalStorage = (key, data) => {
|
|
|
103
111
|
return data;
|
|
104
112
|
};
|
|
105
113
|
|
|
106
|
-
const getFromLocalStorage = (key) => {
|
|
114
|
+
const getFromLocalStorage = (key: string): unknown | null => {
|
|
107
115
|
if (window.localStorage) {
|
|
108
116
|
const data = localStorage.getItem(key);
|
|
109
117
|
if (data) {
|
|
@@ -114,35 +122,8 @@ const getFromLocalStorage = (key) => {
|
|
|
114
122
|
return null;
|
|
115
123
|
};
|
|
116
124
|
|
|
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
125
|
// Credits: http://blog.vishalon.net/index.php/javascript-getting-and-setting-caret-position-in-textarea/
|
|
145
|
-
const setCaretPosition = (element, pos) => {
|
|
126
|
+
const setCaretPosition = (element: HTMLInputElement, pos: number): void => {
|
|
146
127
|
// Modern browsers
|
|
147
128
|
if (element && element.setSelectionRange) {
|
|
148
129
|
element.focus();
|
|
@@ -150,23 +131,26 @@ const setCaretPosition = (element, pos) => {
|
|
|
150
131
|
}
|
|
151
132
|
};
|
|
152
133
|
|
|
153
|
-
const splitPhoneNumber = (countryCodes, phoneNumber) => {
|
|
154
|
-
const countryCodeFound = (code) => countryCodes.filter(
|
|
134
|
+
const splitPhoneNumber = (countryCodes: ICountryCode[], phoneNumber: string): IPhoneNumber => {
|
|
135
|
+
const countryCodeFound = (code: string) => countryCodes.filter(
|
|
155
136
|
(x) => x.code === parseInt(code, 10),
|
|
156
137
|
).length > 0;
|
|
157
138
|
|
|
158
|
-
const findPrefix = () => {
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
139
|
+
const findPrefix = (): string => {
|
|
140
|
+
if (countryCodes.length > 0) {
|
|
141
|
+
const skip = '';
|
|
142
|
+
let count = 1;
|
|
143
|
+
let prefix = `${countryCodes.find((x) => x.important)?.code}`;
|
|
144
|
+
while (count < phoneNumber.length) {
|
|
145
|
+
const split = phoneNumber.substring(skip.length, skip.length + count);
|
|
146
|
+
if (countryCodeFound(split)) {
|
|
147
|
+
prefix = split;
|
|
148
|
+
}
|
|
149
|
+
count += 1;
|
|
166
150
|
}
|
|
167
|
-
|
|
151
|
+
return skip + prefix;
|
|
168
152
|
}
|
|
169
|
-
return
|
|
153
|
+
return '';
|
|
170
154
|
};
|
|
171
155
|
|
|
172
156
|
const prefix = findPrefix();
|
|
@@ -176,25 +160,21 @@ const splitPhoneNumber = (countryCodes, phoneNumber) => {
|
|
|
176
160
|
};
|
|
177
161
|
};
|
|
178
162
|
|
|
179
|
-
const prettyPrintPhone = (countryCodes, phone) => {
|
|
163
|
+
const prettyPrintPhone = (countryCodes: ICountryCode[], phone: string) => {
|
|
180
164
|
if (phone) {
|
|
181
165
|
const { prefix, number } = splitPhoneNumber(countryCodes, phone);
|
|
182
|
-
|
|
166
|
+
if (prefix) {
|
|
167
|
+
return `${prefix} ${number?.match(/\d{1,2}/g)?.join(' ')}`;
|
|
168
|
+
}
|
|
169
|
+
return number?.match(/\d{1,2}/g)?.join(' ');
|
|
183
170
|
}
|
|
184
171
|
return '';
|
|
185
172
|
};
|
|
186
173
|
|
|
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
174
|
const scrollTo = (x = 0, y = 0) => window.scrollTo(x, y);
|
|
196
175
|
|
|
197
176
|
export {
|
|
177
|
+
emailRegex,
|
|
198
178
|
sortAlphaObj,
|
|
199
179
|
isElementInViewport,
|
|
200
180
|
isElementPartlyInViewport,
|
|
@@ -205,12 +185,7 @@ export {
|
|
|
205
185
|
addToSessionStorage,
|
|
206
186
|
getFromSessionStorage,
|
|
207
187
|
setCaretPosition,
|
|
208
|
-
getAccessToken,
|
|
209
|
-
serviceScopeProfile,
|
|
210
188
|
splitPhoneNumber,
|
|
211
189
|
prettyPrintPhone,
|
|
212
|
-
parseError,
|
|
213
190
|
scrollTo,
|
|
214
|
-
setContextInSession,
|
|
215
|
-
getContextFromSession,
|
|
216
191
|
};
|
|
@@ -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
|
+
};
|