@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
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
/* eslint-env browser */
|
|
2
|
+
import React, { useEffect, useState, useRef } from 'react';
|
|
3
|
+
import PropTypes from 'prop-types';
|
|
4
|
+
import { setCopyToClipboard } from '@aarhus-university/au-designsystem-delphinus/source/js/components/nav';
|
|
5
|
+
|
|
6
|
+
const AUProfileWidgetComponent = React.memo(({
|
|
7
|
+
lang,
|
|
8
|
+
name,
|
|
9
|
+
auid,
|
|
10
|
+
studentNumber,
|
|
11
|
+
settings,
|
|
12
|
+
changeLanguageUrl,
|
|
13
|
+
logoutUri,
|
|
14
|
+
profileLabels,
|
|
15
|
+
}) => {
|
|
16
|
+
const [ctcSet, setCtcSet] = useState(false);
|
|
17
|
+
const renderSettings = settings.map((s) => {
|
|
18
|
+
const btnRef = useRef();
|
|
19
|
+
if (s.type === 'anchor') {
|
|
20
|
+
return <a key={s.url} className="sub-nav__item" href={s.url}>{s.text}</a>;
|
|
21
|
+
}
|
|
22
|
+
return (
|
|
23
|
+
<button
|
|
24
|
+
key={s.text}
|
|
25
|
+
ref={btnRef}
|
|
26
|
+
type="button"
|
|
27
|
+
className={`sub-nav__item ${s.classNames}`}
|
|
28
|
+
onClick={() => s.onClick(btnRef.current)}
|
|
29
|
+
data-icon={s.icon}
|
|
30
|
+
>
|
|
31
|
+
{s.text}
|
|
32
|
+
</button>
|
|
33
|
+
);
|
|
34
|
+
});
|
|
35
|
+
|
|
36
|
+
useEffect(() => {
|
|
37
|
+
if (auid > 0 && !ctcSet) {
|
|
38
|
+
setCopyToClipboard(lang);
|
|
39
|
+
setCtcSet(true);
|
|
40
|
+
}
|
|
41
|
+
});
|
|
42
|
+
|
|
43
|
+
return (
|
|
44
|
+
<div className="sub-nav__content theme--normal" aria-labelledby="profile-menu-toggle">
|
|
45
|
+
<div className="sub-nav__user">
|
|
46
|
+
<h2 className="sub-nav__user-name">{name}</h2>
|
|
47
|
+
<button
|
|
48
|
+
type="button"
|
|
49
|
+
className="copy-to-clipboard"
|
|
50
|
+
title={profileLabels[lang].copyAuid}
|
|
51
|
+
aria-label={`${profileLabels[lang].auId}: AU${auid}`}
|
|
52
|
+
>
|
|
53
|
+
{`${profileLabels[lang].auId}: `}
|
|
54
|
+
<span className="copy-to-clipboard__this">{`AU${auid}`}</span>
|
|
55
|
+
</button>
|
|
56
|
+
{
|
|
57
|
+
studentNumber && (
|
|
58
|
+
<button
|
|
59
|
+
type="button"
|
|
60
|
+
className="copy-to-clipboard"
|
|
61
|
+
title={profileLabels[lang].copyStudentNumber}
|
|
62
|
+
aria-label={`${profileLabels[lang].studentNumber}: ${studentNumber}`}
|
|
63
|
+
>
|
|
64
|
+
{`${profileLabels[lang].studentNumber}: `}
|
|
65
|
+
<span className="copy-to-clipboard__this">{studentNumber}</span>
|
|
66
|
+
</button>
|
|
67
|
+
)
|
|
68
|
+
}
|
|
69
|
+
</div>
|
|
70
|
+
<hr />
|
|
71
|
+
{renderSettings}
|
|
72
|
+
<hr />
|
|
73
|
+
{
|
|
74
|
+
changeLanguageUrl && (
|
|
75
|
+
<>
|
|
76
|
+
<a className="sub-nav__item sub-nav__item--icon" href={changeLanguageUrl} data-icon="">{profileLabels[lang].changeLanguage}</a>
|
|
77
|
+
<hr />
|
|
78
|
+
</>
|
|
79
|
+
)
|
|
80
|
+
}
|
|
81
|
+
<a
|
|
82
|
+
className="sub-nav__item sub-nav__item--icon"
|
|
83
|
+
data-icon=""
|
|
84
|
+
href={logoutUri}
|
|
85
|
+
>
|
|
86
|
+
{profileLabels[lang].logout}
|
|
87
|
+
</a>
|
|
88
|
+
</div>
|
|
89
|
+
);
|
|
90
|
+
});
|
|
91
|
+
|
|
92
|
+
AUProfileWidgetComponent.defaultProps = {
|
|
93
|
+
studentNumber: null,
|
|
94
|
+
changeLanguageUrl: '',
|
|
95
|
+
};
|
|
96
|
+
|
|
97
|
+
AUProfileWidgetComponent.propTypes = {
|
|
98
|
+
lang: PropTypes.string.isRequired,
|
|
99
|
+
name: PropTypes.string.isRequired,
|
|
100
|
+
auid: PropTypes.number.isRequired,
|
|
101
|
+
studentNumber: PropTypes.string,
|
|
102
|
+
settings: PropTypes.arrayOf(PropTypes.shape({
|
|
103
|
+
type: PropTypes.string.isRequired,
|
|
104
|
+
url: PropTypes.string,
|
|
105
|
+
text: PropTypes.string.isRequired,
|
|
106
|
+
onClick: PropTypes.func,
|
|
107
|
+
classNames: PropTypes.string,
|
|
108
|
+
icon: PropTypes.string,
|
|
109
|
+
})).isRequired,
|
|
110
|
+
profileLabels: PropTypes.shape({}).isRequired,
|
|
111
|
+
changeLanguageUrl: PropTypes.string,
|
|
112
|
+
logoutUri: PropTypes.string.isRequired,
|
|
113
|
+
};
|
|
114
|
+
|
|
115
|
+
AUProfileWidgetComponent.displayName = 'AUProfileWidgetComponent';
|
|
116
|
+
export default AUProfileWidgetComponent;
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
/* eslint-env browser */
|
|
2
|
+
import React, {
|
|
3
|
+
FC, useEffect, useState, useRef, memo,
|
|
4
|
+
} from 'react';
|
|
5
|
+
import { setCopyToClipboard } from '@aarhus-university/au-designsystem-delphinus/source/js/components/nav';
|
|
6
|
+
|
|
7
|
+
const AUProfileWidgetComponent: FC<AUProfileWidgetComponentProps> = memo(({
|
|
8
|
+
lang,
|
|
9
|
+
name,
|
|
10
|
+
auId,
|
|
11
|
+
studentNumber,
|
|
12
|
+
settings,
|
|
13
|
+
changeLanguageUri,
|
|
14
|
+
logoutUri,
|
|
15
|
+
profileLabels,
|
|
16
|
+
}: AUProfileWidgetComponentProps) => {
|
|
17
|
+
const [ctcSet, setCtcSet] = useState<boolean>(false);
|
|
18
|
+
const btnRefs = useRef<HTMLButtonElement[]>([]);
|
|
19
|
+
btnRefs.current = [];
|
|
20
|
+
const addToRefs = (el: HTMLButtonElement) => {
|
|
21
|
+
if (el && !btnRefs.current.includes(el)) {
|
|
22
|
+
btnRefs.current.push(el);
|
|
23
|
+
}
|
|
24
|
+
};
|
|
25
|
+
const renderSettings = settings.map((s, i) => {
|
|
26
|
+
if (s.type === 'anchor') {
|
|
27
|
+
return (
|
|
28
|
+
<a
|
|
29
|
+
key={s.url}
|
|
30
|
+
className={`sub-nav__item ${s.classNames}`}
|
|
31
|
+
href={s.url}
|
|
32
|
+
data-icon={s.icon}
|
|
33
|
+
data-gtm={s.dataGtm}
|
|
34
|
+
>
|
|
35
|
+
{s.text}
|
|
36
|
+
</a>
|
|
37
|
+
);
|
|
38
|
+
}
|
|
39
|
+
return (
|
|
40
|
+
<button
|
|
41
|
+
key={s.text}
|
|
42
|
+
ref={addToRefs}
|
|
43
|
+
type="button"
|
|
44
|
+
disabled={s.disabled}
|
|
45
|
+
className={`sub-nav__item ${s.classNames}`}
|
|
46
|
+
onClick={() => {
|
|
47
|
+
if (typeof s.onClick === 'function') {
|
|
48
|
+
s.onClick(btnRefs.current[i]);
|
|
49
|
+
}
|
|
50
|
+
}}
|
|
51
|
+
data-icon={s.icon}
|
|
52
|
+
data-gtm={s.dataGtm}
|
|
53
|
+
>
|
|
54
|
+
{s.text}
|
|
55
|
+
</button>
|
|
56
|
+
);
|
|
57
|
+
});
|
|
58
|
+
|
|
59
|
+
useEffect(() => {
|
|
60
|
+
if (auId > 0 && !ctcSet) {
|
|
61
|
+
setCopyToClipboard(lang);
|
|
62
|
+
setCtcSet(true);
|
|
63
|
+
}
|
|
64
|
+
});
|
|
65
|
+
|
|
66
|
+
return (
|
|
67
|
+
<div className="sub-nav__content theme--normal" aria-labelledby="profile-menu-toggle">
|
|
68
|
+
<div className="sub-nav__user">
|
|
69
|
+
<h2 className="sub-nav__user-name">{name}</h2>
|
|
70
|
+
<button
|
|
71
|
+
type="button"
|
|
72
|
+
className="copy-to-clipboard"
|
|
73
|
+
title={profileLabels[lang].copyAuid}
|
|
74
|
+
aria-label={`${profileLabels[lang].auId}: AU${auId}`}
|
|
75
|
+
data-gtm="au-btn-header-copy-auid"
|
|
76
|
+
>
|
|
77
|
+
{`${profileLabels[lang].auId}: `}
|
|
78
|
+
<span className="copy-to-clipboard__this">{`AU${auId}`}</span>
|
|
79
|
+
</button>
|
|
80
|
+
{
|
|
81
|
+
studentNumber && (
|
|
82
|
+
<button
|
|
83
|
+
type="button"
|
|
84
|
+
className="copy-to-clipboard"
|
|
85
|
+
title={profileLabels[lang].copyStudentNumber}
|
|
86
|
+
aria-label={`${profileLabels[lang].studentNumber}: ${studentNumber}`}
|
|
87
|
+
>
|
|
88
|
+
{`${profileLabels[lang].studentNumber}: `}
|
|
89
|
+
<span className="copy-to-clipboard__this">{studentNumber}</span>
|
|
90
|
+
</button>
|
|
91
|
+
)
|
|
92
|
+
}
|
|
93
|
+
</div>
|
|
94
|
+
<hr />
|
|
95
|
+
{renderSettings}
|
|
96
|
+
<hr />
|
|
97
|
+
{
|
|
98
|
+
changeLanguageUri && (
|
|
99
|
+
<>
|
|
100
|
+
<a className="sub-nav__item sub-nav__item--icon" href={changeLanguageUri} data-icon="" data-gtm="au-btn-header-profile-changelanguage">{profileLabels[lang].changeLanguage}</a>
|
|
101
|
+
<hr />
|
|
102
|
+
</>
|
|
103
|
+
)
|
|
104
|
+
}
|
|
105
|
+
<a
|
|
106
|
+
className="sub-nav__item sub-nav__item--icon"
|
|
107
|
+
data-icon=""
|
|
108
|
+
data-gtm="au-a-header-signout"
|
|
109
|
+
href={logoutUri}
|
|
110
|
+
>
|
|
111
|
+
{profileLabels[lang].logout}
|
|
112
|
+
</a>
|
|
113
|
+
</div>
|
|
114
|
+
);
|
|
115
|
+
});
|
|
116
|
+
|
|
117
|
+
AUProfileWidgetComponent.defaultProps = {
|
|
118
|
+
studentNumber: '',
|
|
119
|
+
};
|
|
120
|
+
|
|
121
|
+
AUProfileWidgetComponent.displayName = 'AUProfileWidgetComponent';
|
|
122
|
+
export default AUProfileWidgetComponent;
|
|
@@ -1,47 +1,47 @@
|
|
|
1
|
-
/* eslint-env browser */
|
|
2
|
-
import React, { useState } from 'react';
|
|
3
|
-
import PropTypes from 'prop-types';
|
|
4
|
-
import AUSpinnerComponent from '../delphinus/AUSpinnerComponent';
|
|
5
|
-
import getSourceForFrame from '../../lib/wrapping';
|
|
6
|
-
|
|
7
|
-
const AUEmbedComponent = ({
|
|
8
|
-
api,
|
|
9
|
-
path,
|
|
10
|
-
referrer,
|
|
11
|
-
}) => {
|
|
12
|
-
const [source, setSource] = useState(null);
|
|
13
|
-
const [frameLoaded, setFrameLoaded] = useState(false);
|
|
14
|
-
|
|
15
|
-
return (
|
|
16
|
-
<AUSpinnerComponent
|
|
17
|
-
loaded={frameLoaded}
|
|
18
|
-
loadingCondition={!frameLoaded}
|
|
19
|
-
onLoad={() => {
|
|
20
|
-
getSourceForFrame(api, path, referrer, (frameSrc) => {
|
|
21
|
-
setSource(frameSrc.url);
|
|
22
|
-
setFrameLoaded(true);
|
|
23
|
-
});
|
|
24
|
-
}}
|
|
25
|
-
>
|
|
26
|
-
<iframe
|
|
27
|
-
id="AUEmbedIframe"
|
|
28
|
-
title="AUEmbed"
|
|
29
|
-
src={source}
|
|
30
|
-
onLoad={() => {
|
|
31
|
-
if (window.iFrameResize) {
|
|
32
|
-
window.iFrameResize({ heightCalculationMethods: 'taggedElement', log: false }, '#AUEmbedIframe');
|
|
33
|
-
}
|
|
34
|
-
}}
|
|
35
|
-
/>
|
|
36
|
-
</AUSpinnerComponent>
|
|
37
|
-
);
|
|
38
|
-
};
|
|
39
|
-
|
|
40
|
-
AUEmbedComponent.propTypes = {
|
|
41
|
-
path: PropTypes.string.isRequired,
|
|
42
|
-
api: PropTypes.string.isRequired,
|
|
43
|
-
referrer: PropTypes.string.isRequired,
|
|
44
|
-
};
|
|
45
|
-
|
|
46
|
-
AUEmbedComponent.displayName = 'AUEmbedComponent';
|
|
47
|
-
export default AUEmbedComponent;
|
|
1
|
+
/* eslint-env browser */
|
|
2
|
+
import React, { useState } from 'react';
|
|
3
|
+
import PropTypes from 'prop-types';
|
|
4
|
+
import AUSpinnerComponent from '../delphinus/AUSpinnerComponent';
|
|
5
|
+
import getSourceForFrame from '../../lib/wrapping';
|
|
6
|
+
|
|
7
|
+
const AUEmbedComponent = ({
|
|
8
|
+
api,
|
|
9
|
+
path,
|
|
10
|
+
referrer,
|
|
11
|
+
}) => {
|
|
12
|
+
const [source, setSource] = useState(null);
|
|
13
|
+
const [frameLoaded, setFrameLoaded] = useState(false);
|
|
14
|
+
|
|
15
|
+
return (
|
|
16
|
+
<AUSpinnerComponent
|
|
17
|
+
loaded={frameLoaded}
|
|
18
|
+
loadingCondition={!frameLoaded}
|
|
19
|
+
onLoad={() => {
|
|
20
|
+
getSourceForFrame(api, path, referrer, (frameSrc) => {
|
|
21
|
+
setSource(frameSrc.url);
|
|
22
|
+
setFrameLoaded(true);
|
|
23
|
+
});
|
|
24
|
+
}}
|
|
25
|
+
>
|
|
26
|
+
<iframe
|
|
27
|
+
id="AUEmbedIframe"
|
|
28
|
+
title="AUEmbed"
|
|
29
|
+
src={source}
|
|
30
|
+
onLoad={() => {
|
|
31
|
+
if (window.iFrameResize) {
|
|
32
|
+
window.iFrameResize({ heightCalculationMethods: 'taggedElement', log: false }, '#AUEmbedIframe');
|
|
33
|
+
}
|
|
34
|
+
}}
|
|
35
|
+
/>
|
|
36
|
+
</AUSpinnerComponent>
|
|
37
|
+
);
|
|
38
|
+
};
|
|
39
|
+
|
|
40
|
+
AUEmbedComponent.propTypes = {
|
|
41
|
+
path: PropTypes.string.isRequired,
|
|
42
|
+
api: PropTypes.string.isRequired,
|
|
43
|
+
referrer: PropTypes.string.isRequired,
|
|
44
|
+
};
|
|
45
|
+
|
|
46
|
+
AUEmbedComponent.displayName = 'AUEmbedComponent';
|
|
47
|
+
export default AUEmbedComponent;
|
|
@@ -1,9 +1,8 @@
|
|
|
1
1
|
/* eslint-env browser */
|
|
2
2
|
import React from 'react';
|
|
3
3
|
import PropTypes from 'prop-types';
|
|
4
|
-
import axios from 'axios';
|
|
5
4
|
import AlphaBoxContentComponent from './AlphaBoxContentComponent';
|
|
6
|
-
import
|
|
5
|
+
import AUAutoSuggestComponent from '../../../components/AUAutoSuggestComponent';
|
|
7
6
|
import DataBoxSuggestionComponent from '../databox/DataBoxSuggestionComponent';
|
|
8
7
|
|
|
9
8
|
class AlphaBoxComponent extends React.Component {
|
|
@@ -24,19 +23,22 @@ class AlphaBoxComponent extends React.Component {
|
|
|
24
23
|
if (data.itemsOnly) {
|
|
25
24
|
data.source += '?itemsOnly=true';
|
|
26
25
|
}
|
|
27
|
-
|
|
28
|
-
const { data: pData } = promise;
|
|
26
|
+
fetch(data.source).then((promise) => promise.json()).then((pData) => {
|
|
29
27
|
this.setState({ items: pData.items });
|
|
30
28
|
});
|
|
31
29
|
}
|
|
32
30
|
}
|
|
33
31
|
|
|
34
|
-
getSuggestions(value,
|
|
32
|
+
getSuggestions(value, _, callback) {
|
|
35
33
|
const { items } = this.state;
|
|
36
34
|
const inputValue = value.trim().toLowerCase();
|
|
37
35
|
const inputLength = inputValue.length;
|
|
38
36
|
callback(inputLength < 2 ? []
|
|
39
|
-
: items.filter(
|
|
37
|
+
: items.filter(
|
|
38
|
+
(x) => x.name.toLowerCase().indexOf(inputValue) > -1
|
|
39
|
+
|| x.name.replace(/-/ig, ' ').toLowerCase().indexOf(inputValue) > -1
|
|
40
|
+
|| x.name.replace(/ /ig, '-').toLowerCase().indexOf(inputValue) > -1,
|
|
41
|
+
)
|
|
40
42
|
.sort((a, b) => a.name.toLowerCase().localeCompare(b.name.toLowerCase(), 'da', { ignorePunctuation: true })));
|
|
41
43
|
}
|
|
42
44
|
|
|
@@ -64,35 +66,18 @@ class AlphaBoxComponent extends React.Component {
|
|
|
64
66
|
<div className="au_alphabox" style={{ backgroundColor: box.background.color }}>
|
|
65
67
|
<div>
|
|
66
68
|
<h2>
|
|
67
|
-
<
|
|
68
|
-
<a href={config.url}>{config.title}</a>
|
|
69
|
-
</strong>
|
|
69
|
+
<a href={config.url}>{config.title}</a>
|
|
70
70
|
</h2>
|
|
71
|
-
{(() => {
|
|
72
|
-
if (config.description !== '') {
|
|
73
|
-
return <p>{config.description}</p>;
|
|
74
|
-
}
|
|
75
|
-
return null;
|
|
76
|
-
})()}
|
|
77
|
-
{(() => {
|
|
78
|
-
if (config.links.length > 0) {
|
|
79
|
-
return (
|
|
80
|
-
<ul className="quicklinks resetlist">
|
|
81
|
-
{renderLinks}
|
|
82
|
-
</ul>
|
|
83
|
-
);
|
|
84
|
-
}
|
|
85
|
-
return null;
|
|
86
|
-
})()}
|
|
87
71
|
<AlphaBoxContentComponent
|
|
88
72
|
items={items}
|
|
89
73
|
linkColor={box.background.linkColor}
|
|
74
|
+
noResultsText={config.noResultsAlphabet}
|
|
75
|
+
noResultsUri={config.noResultsUri}
|
|
90
76
|
/>
|
|
91
|
-
<
|
|
77
|
+
<AUAutoSuggestComponent
|
|
92
78
|
placeholder={box.search.placeHolder}
|
|
93
|
-
setQuery={() => { }}
|
|
94
79
|
setResults={(_items) => {
|
|
95
|
-
if (_items.length
|
|
80
|
+
if (_items.length >= 1 && _items[0].url) {
|
|
96
81
|
window.location.href = _items[0].url;
|
|
97
82
|
}
|
|
98
83
|
}}
|
|
@@ -100,7 +85,20 @@ class AlphaBoxComponent extends React.Component {
|
|
|
100
85
|
getSuggestions={this.getSuggestions}
|
|
101
86
|
getSuggestionValue={(suggestion) => suggestion.name}
|
|
102
87
|
renderSuggestion={(suggestion) => <DataBoxSuggestionComponent item={suggestion} />}
|
|
88
|
+
noResultsText={config.noResultsSearch}
|
|
103
89
|
/>
|
|
90
|
+
{
|
|
91
|
+
config.description !== '' && (
|
|
92
|
+
<h3>{config.description}</h3>
|
|
93
|
+
)
|
|
94
|
+
}
|
|
95
|
+
{
|
|
96
|
+
config.links.length > 0 && (
|
|
97
|
+
<ul className="quicklinks resetlist">
|
|
98
|
+
{renderLinks}
|
|
99
|
+
</ul>
|
|
100
|
+
)
|
|
101
|
+
}
|
|
104
102
|
</div>
|
|
105
103
|
</div>
|
|
106
104
|
);
|
|
@@ -126,6 +124,9 @@ AlphaBoxComponent.propTypes = {
|
|
|
126
124
|
url: PropTypes.string.isRequired,
|
|
127
125
|
})).isRequired,
|
|
128
126
|
title: PropTypes.string.isRequired,
|
|
127
|
+
noResultsAlphabet: PropTypes.string.isRequired,
|
|
128
|
+
noResultsSearch: PropTypes.string.isRequired,
|
|
129
|
+
noResultsUri: PropTypes.string.isRequired,
|
|
129
130
|
}).isRequired,
|
|
130
131
|
background: PropTypes.shape({
|
|
131
132
|
color: PropTypes.string.isRequired,
|
|
@@ -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
|
class AlphaBoxContentComponent extends React.Component {
|
|
6
6
|
constructor(props) {
|
|
@@ -13,7 +13,9 @@ class AlphaBoxContentComponent extends React.Component {
|
|
|
13
13
|
|
|
14
14
|
render() {
|
|
15
15
|
const { letterIndex } = this.state;
|
|
16
|
-
const {
|
|
16
|
+
const {
|
|
17
|
+
items, linkColor, noResultsText, noResultsUri,
|
|
18
|
+
} = this.props;
|
|
17
19
|
|
|
18
20
|
const renderLetters = this.letters.map((l, i) => {
|
|
19
21
|
const available = items.filter(
|
|
@@ -96,29 +98,38 @@ class AlphaBoxContentComponent extends React.Component {
|
|
|
96
98
|
<ul className="letters">
|
|
97
99
|
{renderLetters}
|
|
98
100
|
</ul>
|
|
99
|
-
{
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
<
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
101
|
+
{
|
|
102
|
+
letterIndex > -1 && (
|
|
103
|
+
<div>
|
|
104
|
+
<ul className="items">
|
|
105
|
+
{renderItems}
|
|
106
|
+
{
|
|
107
|
+
(noResultsText && noResultsUri) && (
|
|
108
|
+
<li className="no-results"><a href={noResultsUri}>{noResultsText}</a></li>
|
|
109
|
+
)
|
|
110
|
+
}
|
|
111
|
+
</ul>
|
|
112
|
+
</div>
|
|
113
|
+
)
|
|
114
|
+
}
|
|
111
115
|
</div>
|
|
112
116
|
);
|
|
113
117
|
}
|
|
114
118
|
}
|
|
115
119
|
|
|
120
|
+
AlphaBoxContentComponent.defaultProps = {
|
|
121
|
+
noResultsText: '',
|
|
122
|
+
noResultsUri: '',
|
|
123
|
+
};
|
|
124
|
+
|
|
116
125
|
AlphaBoxContentComponent.propTypes = {
|
|
117
126
|
linkColor: PropTypes.string.isRequired,
|
|
118
127
|
items: PropTypes.arrayOf(PropTypes.shape({
|
|
119
128
|
name: PropTypes.string.isRequired,
|
|
120
129
|
url: PropTypes.string.isRequired,
|
|
121
130
|
})).isRequired,
|
|
131
|
+
noResultsText: PropTypes.string,
|
|
132
|
+
noResultsUri: PropTypes.string,
|
|
122
133
|
};
|
|
123
134
|
|
|
124
135
|
AlphaBoxContentComponent.displayName = 'AlphaBoxContentComponent';
|
|
@@ -1,28 +1,7 @@
|
|
|
1
|
+
/* eslint-disable @typescript-eslint/no-empty-function */
|
|
1
2
|
import React from 'react';
|
|
2
3
|
import PropTypes from 'prop-types';
|
|
3
4
|
|
|
4
|
-
/**
|
|
5
|
-
* AU Kollapserbart Komponent
|
|
6
|
-
*
|
|
7
|
-
* Eksempel:
|
|
8
|
-
* ```jsx
|
|
9
|
-
* <AUCollapsibleComponent
|
|
10
|
-
key="collapse"
|
|
11
|
-
collapsed
|
|
12
|
-
header="Collapsible element"
|
|
13
|
-
level={2}
|
|
14
|
-
className="hide-for-small-only"
|
|
15
|
-
onClick={(collapsed, node) => {
|
|
16
|
-
this.setState({
|
|
17
|
-
spinnerVisible: !collapsed,
|
|
18
|
-
});
|
|
19
|
-
}}
|
|
20
|
-
>
|
|
21
|
-
<h1>Test</h1>
|
|
22
|
-
</AUCollapsibleComponent>
|
|
23
|
-
* ```
|
|
24
|
-
*/
|
|
25
|
-
|
|
26
5
|
class AUCollapsibleComponent extends React.Component {
|
|
27
6
|
constructor(props) {
|
|
28
7
|
super(props);
|
|
@@ -1,30 +1,8 @@
|
|
|
1
|
+
/* eslint-disable @typescript-eslint/no-empty-function */
|
|
1
2
|
/* eslint-env browser */
|
|
2
3
|
import React from 'react';
|
|
3
4
|
import PropTypes from 'prop-types';
|
|
4
|
-
import { isElementInViewport } from '
|
|
5
|
-
/**
|
|
6
|
-
* AU Spinner Komponent
|
|
7
|
-
* Bliver brugt til lazy-loading af elementer, der først skal indlæses når de er synlige.
|
|
8
|
-
*
|
|
9
|
-
* Eksempel:
|
|
10
|
-
* ```jsx
|
|
11
|
-
* <AUSpinnerComponent
|
|
12
|
-
domID={spinnerID}
|
|
13
|
-
visible={this.state.spinnerVisible}
|
|
14
|
-
columns="large-12 medium-12 small-12"
|
|
15
|
-
content={<h1>Hej</h1>}
|
|
16
|
-
loaded={this.state.spinnerLoaded}
|
|
17
|
-
loadingCondition
|
|
18
|
-
onLoad={() => {
|
|
19
|
-
setTimeout(() => {
|
|
20
|
-
this.setState({
|
|
21
|
-
spinnerLoaded: true,
|
|
22
|
-
});
|
|
23
|
-
}, 2000);
|
|
24
|
-
}}
|
|
25
|
-
/>
|
|
26
|
-
* ```
|
|
27
|
-
*/
|
|
5
|
+
import { isElementInViewport } from '../../../lib/helpers';
|
|
28
6
|
|
|
29
7
|
class AUSpinnerComponent extends React.Component {
|
|
30
8
|
constructor(props) {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/* eslint-env browser */
|
|
2
2
|
import React from 'react';
|
|
3
3
|
import PropTypes from 'prop-types';
|
|
4
|
-
import { sortAlphaObj } from '
|
|
4
|
+
import { sortAlphaObj } from '../../../lib/helpers';
|
|
5
5
|
|
|
6
6
|
class DataBoxAlphabetComponent extends React.Component {
|
|
7
7
|
constructor(props) {
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
/* eslint-env browser */
|
|
2
2
|
import React from 'react';
|
|
3
3
|
import PropTypes from 'prop-types';
|
|
4
|
-
import { sortAlphaObj } from '
|
|
5
|
-
import AUCollapsibleComponent from '../AUCollapsibleComponent';
|
|
4
|
+
import { sortAlphaObj } from '../../../lib/helpers';
|
|
5
|
+
import AUCollapsibleComponent from '../common/AUCollapsibleComponent';
|
|
6
6
|
|
|
7
7
|
class DataBoxAssociationComponent extends React.Component {
|
|
8
8
|
constructor(props) {
|
|
@@ -1,7 +1,8 @@
|
|
|
1
|
+
/* eslint-disable @typescript-eslint/no-empty-function */
|
|
1
2
|
/* eslint-env browser */
|
|
2
3
|
import React from 'react';
|
|
3
4
|
import PropTypes from 'prop-types';
|
|
4
|
-
import
|
|
5
|
+
import AUAutoSuggestComponent from '../../../components/AUAutoSuggestComponent';
|
|
5
6
|
import DataBoxSuggestionComponent from './DataBoxSuggestionComponent';
|
|
6
7
|
|
|
7
8
|
class DataBoxButtonComponent extends React.Component {
|
|
@@ -58,7 +59,7 @@ class DataBoxButtonComponent extends React.Component {
|
|
|
58
59
|
return (
|
|
59
60
|
<div className={classNames} key={i}>
|
|
60
61
|
<span dangerouslySetInnerHTML={{ __html: b.text }} />
|
|
61
|
-
<
|
|
62
|
+
<AUAutoSuggestComponent
|
|
62
63
|
placeholder={box.search.placeHolder}
|
|
63
64
|
setQuery={() => { }}
|
|
64
65
|
setResults={(items) => {
|
|
@@ -130,7 +131,10 @@ DataBoxButtonComponent.propTypes = {
|
|
|
130
131
|
searchValue: PropTypes.string,
|
|
131
132
|
setActive: PropTypes.func.isRequired,
|
|
132
133
|
setSearchValue: PropTypes.func.isRequired,
|
|
133
|
-
button: PropTypes.shape({
|
|
134
|
+
button: PropTypes.shape({
|
|
135
|
+
text: PropTypes.string.isRequired,
|
|
136
|
+
link: PropTypes.string.isRequired,
|
|
137
|
+
}).isRequired,
|
|
134
138
|
box: PropTypes.shape({
|
|
135
139
|
background: PropTypes.shape({
|
|
136
140
|
color: PropTypes.string.isRequired,
|
|
@@ -7,8 +7,8 @@ import DataBoxButtonComponent from './DataBoxButtonComponent';
|
|
|
7
7
|
import DataBoxGroupingComponent from './DataBoxGroupingComponent';
|
|
8
8
|
import DataBoxSearchResultComponent from './DataBoxSearchResultComponent';
|
|
9
9
|
import DataBoxAlphabetComponent from './DataBoxAlphabetComponent';
|
|
10
|
-
import AUSpinnerComponent from '../AUSpinnerComponent';
|
|
11
|
-
import { sortAlphaObj } from '
|
|
10
|
+
import AUSpinnerComponent from '../common/AUSpinnerComponent';
|
|
11
|
+
import { sortAlphaObj } from '../../../lib/helpers';
|
|
12
12
|
|
|
13
13
|
class DataBoxComponent extends React.Component {
|
|
14
14
|
constructor(props) {
|
|
@@ -14,10 +14,12 @@ const DataBoxGroupingComponent = (props) => {
|
|
|
14
14
|
} = props;
|
|
15
15
|
let renderAssociations;
|
|
16
16
|
if (stacked && grouping.associations.length === 1) {
|
|
17
|
+
// eslint-disable-next-line react/destructuring-assignment
|
|
17
18
|
renderAssociations = props.grouping.associations.map(
|
|
18
19
|
(a) => <DataBoxStackedAssociationComponent key={a.id} assoc={a} />,
|
|
19
20
|
);
|
|
20
21
|
} else {
|
|
22
|
+
// eslint-disable-next-line react/destructuring-assignment
|
|
21
23
|
renderAssociations = props.grouping.associations.map((a, i) => {
|
|
22
24
|
const open = expand
|
|
23
25
|
|| grouping.associations.length === 1
|
|
@@ -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 DataBoxSearchResultComponent = (props) => {
|
|
6
6
|
const { items, searchValue } = props;
|
|
@@ -23,10 +23,6 @@ const DataBoxSearchResultComponent = (props) => {
|
|
|
23
23
|
);
|
|
24
24
|
};
|
|
25
25
|
|
|
26
|
-
DataBoxSearchResultComponent.defaultProps = {
|
|
27
|
-
|
|
28
|
-
};
|
|
29
|
-
|
|
30
26
|
DataBoxSearchResultComponent.propTypes = {
|
|
31
27
|
items: PropTypes.arrayOf(PropTypes.shape({
|
|
32
28
|
id: PropTypes.number.isRequired,
|