@aarhus-university/au-lib-react-components 9.11.8 → 9.11.12

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (141) hide show
  1. package/.eslintrc +18 -18
  2. package/README.md +20 -20
  3. package/babel.config.js +6 -6
  4. package/build/dev.html +328 -328
  5. package/build/umd/all.css +2 -2
  6. package/build/umd/all.js +1 -1
  7. package/build/umd/alphabox.js +1 -1
  8. package/build/umd/auAuth.js +1 -1
  9. package/build/umd/databox.js +2 -2
  10. package/build/umd/databox.js.LICENSE.txt +5 -5
  11. package/build/umd/diagramme.js +1 -1
  12. package/build/umd/flowbox.js +1 -1
  13. package/build/umd/news.js +1 -1
  14. package/build/umd/universe.js +1 -1
  15. package/package.json +60 -60
  16. package/src/all.js +3 -3
  17. package/src/app.js +263 -263
  18. package/src/components/AUAlertComponent.js +158 -158
  19. package/src/components/AUAmountComponent.js +84 -84
  20. package/src/components/AUBannerComponent.js +99 -99
  21. package/src/components/AUCalendarComponent.js +393 -393
  22. package/src/components/AUCollapsibleComponent.js +173 -173
  23. package/src/components/AUDatepickerComponent.js +105 -105
  24. package/src/components/AUDiagrammeComponent.js +310 -310
  25. package/src/components/AUFilterCheckboxComponent.js +122 -122
  26. package/src/components/AUFocusComponent.js +55 -55
  27. package/src/components/AUModalComponent.js +94 -94
  28. package/src/components/AUPaginationComponent.js +103 -103
  29. package/src/components/AUSpinnerComponent.js +125 -125
  30. package/src/components/AutoSuggestComponent.js +132 -132
  31. package/src/components/alphabox/AlphaBoxComponent.js +140 -140
  32. package/src/components/alphabox/AlphaBoxContentComponent.js +125 -125
  33. package/src/components/context/AUUserContextComponent.js +91 -91
  34. package/src/components/context/ImpersonateComponent.js +54 -54
  35. package/src/components/databox/DataBoxAlphabetComponent.js +144 -144
  36. package/src/components/databox/DataBoxAssociationComponent.js +122 -122
  37. package/src/components/databox/DataBoxButtonComponent.js +153 -153
  38. package/src/components/databox/DataBoxComponent.js +297 -297
  39. package/src/components/databox/DataBoxGroupingComponent.js +62 -62
  40. package/src/components/databox/DataBoxSearchResultComponent.js +40 -40
  41. package/src/components/databox/DataBoxStackedAssociationComponent.js +58 -58
  42. package/src/components/databox/DataBoxSuggestionComponent.js +39 -39
  43. package/src/components/delphinus/AUAlertComponent.js +85 -85
  44. package/src/components/delphinus/AUCalendarComponent.js +487 -487
  45. package/src/components/delphinus/AUContentToggleComponent.js +32 -32
  46. package/src/components/delphinus/AUDatepickerComponent.js +164 -164
  47. package/src/components/delphinus/AULoginComponent.js +65 -65
  48. package/src/components/delphinus/AUModalComponent.js +89 -88
  49. package/src/components/delphinus/AUSpinnerComponent.js +77 -114
  50. package/src/components/delphinus/AUSubNavComponent.js +53 -53
  51. package/src/components/delphinus/AUTabbedContentComponent.js +150 -150
  52. package/src/components/delphinus/AUTableComponent.js +28 -28
  53. package/src/components/delphinus/AUToastComponent.js +91 -91
  54. package/src/components/delphinus/AUToolbarComponent.js +48 -48
  55. package/src/components/delphinus/hooks.js +28 -26
  56. package/src/components/flowbox/FlowBoxComponent.js +126 -126
  57. package/src/components/flowbox/FlowBoxPhoneComponent.js +106 -106
  58. package/src/components/form/AUMobilePrefixComponent.js +18 -18
  59. package/src/components/form/AUReceiptComponent.js +40 -40
  60. package/src/components/form/AUSubmitButtonContainerComponent.js +39 -39
  61. package/src/components/news/EventLayout1Component.js +94 -94
  62. package/src/components/news/EventLayout2Component.js +90 -90
  63. package/src/components/news/EventLayout3Component.js +68 -68
  64. package/src/components/news/NewsCategoriesComponent.js +21 -21
  65. package/src/components/news/NewsCollageBannerComponent.js +71 -71
  66. package/src/components/news/NewsCollageBannerRSSComponent.js +79 -79
  67. package/src/components/news/NewsColumnsComponent.js +125 -125
  68. package/src/components/news/NewsLanguageChangeComponent.js +74 -74
  69. package/src/components/news/NewsLayout1Component.js +80 -80
  70. package/src/components/news/NewsLayout2Component.js +80 -80
  71. package/src/components/news/NewsLayout3Component.js +81 -81
  72. package/src/components/news/NewsLayout4Component.js +80 -80
  73. package/src/components/news/NewsLayout5Component.js +61 -61
  74. package/src/components/news/NewsLayout6Component.js +55 -55
  75. package/src/components/news/NewsLayout7Component.js +58 -58
  76. package/src/components/news/NewsLayout8Component.js +57 -57
  77. package/src/components/news/NewsListComponent.js +291 -291
  78. package/src/components/news/NewsPopUpComponent.js +591 -591
  79. package/src/components/news/NewsRSSComponent.js +74 -74
  80. package/src/components/news/NewsSocialComponent.js +104 -104
  81. package/src/components/news/NewsSubHeaderComponent.js +19 -19
  82. package/src/components/password/AUChangePasswordComponent.js +177 -177
  83. package/src/components/password/AUCurrentPasswordComponent.js +72 -72
  84. package/src/components/password/AUNewPasswordComponent.js +143 -143
  85. package/src/components/password/AUPasswordActions.js +101 -101
  86. package/src/components/password/AUPasswordHooks.js +47 -47
  87. package/src/components/password/AUPasswordReducer.js +78 -78
  88. package/src/components/password/AUPasswordRequirementsComponent.js +29 -29
  89. package/src/components/profile/AUProfileActions.js +128 -128
  90. package/src/components/profile/AUProfileAvatar2016Component.js +99 -99
  91. package/src/components/profile/AUProfileAvatarComponent.js +83 -83
  92. package/src/components/profile/AUProfileAvatarV2Component.js +91 -91
  93. package/src/components/profile/AUProfileAvatarV3Component.js +79 -79
  94. package/src/components/profile/AUProfileContainerComponent.js +283 -283
  95. package/src/components/profile/AUProfileHooks.js +30 -30
  96. package/src/components/profile/AUProfileItemComponent.js +54 -54
  97. package/src/components/profile/AUProfileLanguageComponent.js +131 -131
  98. package/src/components/profile/AUProfileLoginComponent.js +41 -41
  99. package/src/components/profile/AUProfileMailComponent.js +307 -307
  100. package/src/components/profile/AUProfileMobileComponent.js +164 -164
  101. package/src/components/profile/AUProfileNameComponent.js +253 -253
  102. package/src/components/profile/AUProfileNextOfKinComponent.js +216 -216
  103. package/src/components/profile/AUProfileReducer.js +230 -230
  104. package/src/components/profile/AUProfileWidgetComponent.js +95 -95
  105. package/src/components/profile/AUProfileWidgetV2Component.js +116 -116
  106. package/src/components/profile/AUProfileWidgetV3Component.js +129 -129
  107. package/src/components/universe/StaffTopComponent.js +362 -362
  108. package/src/components/universe/StudentTopComponent.js +137 -137
  109. package/src/components/universe/UniverseContainerComponent.js +62 -62
  110. package/src/components/wrapping/AUEmbedComponent.js +47 -47
  111. package/src/config/webpack.dev.config.js +47 -47
  112. package/src/config/webpack.umd.config.js +85 -85
  113. package/src/index.js +6 -6
  114. package/src/lib/au-alphabox.js +102 -102
  115. package/src/lib/au-auth.js +227 -227
  116. package/src/lib/au-databox.js +403 -403
  117. package/src/lib/au-diagramme.js +87 -87
  118. package/src/lib/au-flowbox.js +95 -95
  119. package/src/lib/au-news.js +371 -371
  120. package/src/lib/helpers.js +216 -216
  121. package/src/lib/i18n.js +601 -601
  122. package/src/lib/menu.js +10 -10
  123. package/src/lib/tracking.js +65 -65
  124. package/src/lib/universe.js +9 -9
  125. package/src/lib/urlHandler.js +63 -63
  126. package/src/lib/validation.js +181 -181
  127. package/src/lib/wrapping.js +16 -16
  128. package/src/styles/_settings.scss +10 -10
  129. package/src/styles/alert.scss +39 -39
  130. package/src/styles/alphabox.scss +208 -208
  131. package/src/styles/app.scss +13 -13
  132. package/src/styles/autosuggest.scss +57 -57
  133. package/src/styles/calendar.scss +111 -111
  134. package/src/styles/databox.scss +563 -563
  135. package/src/styles/diagramme.scss +119 -119
  136. package/src/styles/filtercheckbox.scss +4 -4
  137. package/src/styles/flowbox.scss +72 -72
  138. package/src/styles/maps.scss +395 -395
  139. package/src/styles/modal.scss +34 -34
  140. package/src/styles/pagination.scss +10 -10
  141. package/src/styles/spinner.scss +30 -30
@@ -1,116 +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;
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;
@@ -1,129 +1,129 @@
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 (
21
- <a
22
- key={s.url}
23
- className={`sub-nav__item ${s.classNames}`}
24
- href={s.url}
25
- data-icon={s.icon}
26
- data-gtm={s.dataGtm}>
27
- {s.text}
28
- </a>
29
- );
30
- }
31
- return (
32
- <button
33
- key={s.text}
34
- ref={btnRef}
35
- type="button"
36
- disabled={s.disabled}
37
- className={`sub-nav__item ${s.classNames}`}
38
- onClick={() => s.onClick(btnRef.current)}
39
- data-icon={s.icon}
40
- data-gtm={s.dataGtm}
41
- >
42
- {s.text}
43
- </button>
44
- );
45
- });
46
-
47
- useEffect(() => {
48
- if (auid > 0 && !ctcSet) {
49
- setCopyToClipboard(lang);
50
- setCtcSet(true);
51
- }
52
- });
53
-
54
- return (
55
- <div className="sub-nav__content theme--normal" aria-labelledby="profile-menu-toggle">
56
- <div className="sub-nav__user">
57
- <h2 className="sub-nav__user-name">{name}</h2>
58
- <button
59
- type="button"
60
- className="copy-to-clipboard"
61
- title={profileLabels[lang].copyAuid}
62
- aria-label={`${profileLabels[lang].auId}: AU${auid}`}
63
- data-gtm="au-btn-header-copy-auid"
64
- >
65
- {`${profileLabels[lang].auId}: `}
66
- <span className="copy-to-clipboard__this">{`AU${auid}`}</span>
67
- </button>
68
- {
69
- studentNumber && (
70
- <button
71
- type="button"
72
- className="copy-to-clipboard"
73
- title={profileLabels[lang].copyStudentNumber}
74
- aria-label={`${profileLabels[lang].studentNumber}: ${studentNumber}`}
75
- >
76
- {`${profileLabels[lang].studentNumber}: `}
77
- <span className="copy-to-clipboard__this">{studentNumber}</span>
78
- </button>
79
- )
80
- }
81
- </div>
82
- <hr />
83
- {renderSettings}
84
- <hr />
85
- {
86
- changeLanguageUrl && (
87
- <>
88
- <a className="sub-nav__item sub-nav__item--icon" href={changeLanguageUrl} data-icon="" data-gtm="au-btn-header-profile-changelanguage">{profileLabels[lang].changeLanguage}</a>
89
- <hr />
90
- </>
91
- )
92
- }
93
- <a
94
- className="sub-nav__item sub-nav__item--icon"
95
- data-icon=""
96
- data-gtm="au-a-header-signout"
97
- href={logoutUri}
98
- >
99
- {profileLabels[lang].logout}
100
- </a>
101
- </div>
102
- );
103
- });
104
-
105
- AUProfileWidgetComponent.defaultProps = {
106
- studentNumber: null,
107
- changeLanguageUrl: '',
108
- };
109
-
110
- AUProfileWidgetComponent.propTypes = {
111
- lang: PropTypes.string.isRequired,
112
- name: PropTypes.string.isRequired,
113
- auid: PropTypes.number.isRequired,
114
- studentNumber: PropTypes.string,
115
- settings: PropTypes.arrayOf(PropTypes.shape({
116
- type: PropTypes.string.isRequired,
117
- url: PropTypes.string,
118
- text: PropTypes.string.isRequired,
119
- onClick: PropTypes.func,
120
- classNames: PropTypes.string,
121
- icon: PropTypes.string,
122
- })).isRequired,
123
- profileLabels: PropTypes.shape({}).isRequired,
124
- changeLanguageUrl: PropTypes.string,
125
- logoutUri: PropTypes.string.isRequired,
126
- };
127
-
128
- AUProfileWidgetComponent.displayName = 'AUProfileWidgetComponent';
129
- export default AUProfileWidgetComponent;
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 (
21
+ <a
22
+ key={s.url}
23
+ className={`sub-nav__item ${s.classNames}`}
24
+ href={s.url}
25
+ data-icon={s.icon}
26
+ data-gtm={s.dataGtm}>
27
+ {s.text}
28
+ </a>
29
+ );
30
+ }
31
+ return (
32
+ <button
33
+ key={s.text}
34
+ ref={btnRef}
35
+ type="button"
36
+ disabled={s.disabled}
37
+ className={`sub-nav__item ${s.classNames}`}
38
+ onClick={() => s.onClick(btnRef.current)}
39
+ data-icon={s.icon}
40
+ data-gtm={s.dataGtm}
41
+ >
42
+ {s.text}
43
+ </button>
44
+ );
45
+ });
46
+
47
+ useEffect(() => {
48
+ if (auid > 0 && !ctcSet) {
49
+ setCopyToClipboard(lang);
50
+ setCtcSet(true);
51
+ }
52
+ });
53
+
54
+ return (
55
+ <div className="sub-nav__content theme--normal" aria-labelledby="profile-menu-toggle">
56
+ <div className="sub-nav__user">
57
+ <h2 className="sub-nav__user-name">{name}</h2>
58
+ <button
59
+ type="button"
60
+ className="copy-to-clipboard"
61
+ title={profileLabels[lang].copyAuid}
62
+ aria-label={`${profileLabels[lang].auId}: AU${auid}`}
63
+ data-gtm="au-btn-header-copy-auid"
64
+ >
65
+ {`${profileLabels[lang].auId}: `}
66
+ <span className="copy-to-clipboard__this">{`AU${auid}`}</span>
67
+ </button>
68
+ {
69
+ studentNumber && (
70
+ <button
71
+ type="button"
72
+ className="copy-to-clipboard"
73
+ title={profileLabels[lang].copyStudentNumber}
74
+ aria-label={`${profileLabels[lang].studentNumber}: ${studentNumber}`}
75
+ >
76
+ {`${profileLabels[lang].studentNumber}: `}
77
+ <span className="copy-to-clipboard__this">{studentNumber}</span>
78
+ </button>
79
+ )
80
+ }
81
+ </div>
82
+ <hr />
83
+ {renderSettings}
84
+ <hr />
85
+ {
86
+ changeLanguageUrl && (
87
+ <>
88
+ <a className="sub-nav__item sub-nav__item--icon" href={changeLanguageUrl} data-icon="" data-gtm="au-btn-header-profile-changelanguage">{profileLabels[lang].changeLanguage}</a>
89
+ <hr />
90
+ </>
91
+ )
92
+ }
93
+ <a
94
+ className="sub-nav__item sub-nav__item--icon"
95
+ data-icon=""
96
+ data-gtm="au-a-header-signout"
97
+ href={logoutUri}
98
+ >
99
+ {profileLabels[lang].logout}
100
+ </a>
101
+ </div>
102
+ );
103
+ });
104
+
105
+ AUProfileWidgetComponent.defaultProps = {
106
+ studentNumber: null,
107
+ changeLanguageUrl: '',
108
+ };
109
+
110
+ AUProfileWidgetComponent.propTypes = {
111
+ lang: PropTypes.string.isRequired,
112
+ name: PropTypes.string.isRequired,
113
+ auid: PropTypes.number.isRequired,
114
+ studentNumber: PropTypes.string,
115
+ settings: PropTypes.arrayOf(PropTypes.shape({
116
+ type: PropTypes.string.isRequired,
117
+ url: PropTypes.string,
118
+ text: PropTypes.string.isRequired,
119
+ onClick: PropTypes.func,
120
+ classNames: PropTypes.string,
121
+ icon: PropTypes.string,
122
+ })).isRequired,
123
+ profileLabels: PropTypes.shape({}).isRequired,
124
+ changeLanguageUrl: PropTypes.string,
125
+ logoutUri: PropTypes.string.isRequired,
126
+ };
127
+
128
+ AUProfileWidgetComponent.displayName = 'AUProfileWidgetComponent';
129
+ export default AUProfileWidgetComponent;