@aarhus-university/au-lib-react-components 9.18.0 → 9.18.2

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 +157 -157
  31. package/src/components/alphabox/AlphaBoxComponent.js +145 -145
  32. package/src/components/alphabox/AlphaBoxContentComponent.js +136 -136
  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 +94 -94
  49. package/src/components/delphinus/AUSpinnerComponent.js +114 -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 -28
  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 +189 -189
  83. package/src/components/password/AUCurrentPasswordComponent.js +72 -72
  84. package/src/components/password/AUNewPasswordComponent.js +151 -151
  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 +80 -80
  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 +130 -130
  107. package/src/components/universe/StaffTopComponent.js +366 -366
  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 +86 -86
  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 +222 -222
  121. package/src/lib/i18n.js +605 -605
  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 +219 -219
  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 +222 -222
  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,130 +1,130 @@
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
- >
28
- {s.text}
29
- </a>
30
- );
31
- }
32
- return (
33
- <button
34
- key={s.text}
35
- ref={btnRef}
36
- type="button"
37
- disabled={s.disabled}
38
- className={`sub-nav__item ${s.classNames}`}
39
- onClick={() => s.onClick(btnRef.current)}
40
- data-icon={s.icon}
41
- data-gtm={s.dataGtm}
42
- >
43
- {s.text}
44
- </button>
45
- );
46
- });
47
-
48
- useEffect(() => {
49
- if (auid > 0 && !ctcSet) {
50
- setCopyToClipboard(lang);
51
- setCtcSet(true);
52
- }
53
- });
54
-
55
- return (
56
- <div className="sub-nav__content theme--normal" aria-labelledby="profile-menu-toggle">
57
- <div className="sub-nav__user">
58
- <h2 className="sub-nav__user-name">{name}</h2>
59
- <button
60
- type="button"
61
- className="copy-to-clipboard"
62
- title={profileLabels[lang].copyAuid}
63
- aria-label={`${profileLabels[lang].auId}: AU${auid}`}
64
- data-gtm="au-btn-header-copy-auid"
65
- >
66
- {`${profileLabels[lang].auId}: `}
67
- <span className="copy-to-clipboard__this">{`AU${auid}`}</span>
68
- </button>
69
- {
70
- studentNumber && (
71
- <button
72
- type="button"
73
- className="copy-to-clipboard"
74
- title={profileLabels[lang].copyStudentNumber}
75
- aria-label={`${profileLabels[lang].studentNumber}: ${studentNumber}`}
76
- >
77
- {`${profileLabels[lang].studentNumber}: `}
78
- <span className="copy-to-clipboard__this">{studentNumber}</span>
79
- </button>
80
- )
81
- }
82
- </div>
83
- <hr />
84
- {renderSettings}
85
- <hr />
86
- {
87
- changeLanguageUrl && (
88
- <>
89
- <a className="sub-nav__item sub-nav__item--icon" href={changeLanguageUrl} data-icon="" data-gtm="au-btn-header-profile-changelanguage">{profileLabels[lang].changeLanguage}</a>
90
- <hr />
91
- </>
92
- )
93
- }
94
- <a
95
- className="sub-nav__item sub-nav__item--icon"
96
- data-icon=""
97
- data-gtm="au-a-header-signout"
98
- href={logoutUri}
99
- >
100
- {profileLabels[lang].logout}
101
- </a>
102
- </div>
103
- );
104
- });
105
-
106
- AUProfileWidgetComponent.defaultProps = {
107
- studentNumber: null,
108
- changeLanguageUrl: '',
109
- };
110
-
111
- AUProfileWidgetComponent.propTypes = {
112
- lang: PropTypes.string.isRequired,
113
- name: PropTypes.string.isRequired,
114
- auid: PropTypes.number.isRequired,
115
- studentNumber: PropTypes.string,
116
- settings: PropTypes.arrayOf(PropTypes.shape({
117
- type: PropTypes.string.isRequired,
118
- url: PropTypes.string,
119
- text: PropTypes.string.isRequired,
120
- onClick: PropTypes.func,
121
- classNames: PropTypes.string,
122
- icon: PropTypes.string,
123
- })).isRequired,
124
- profileLabels: PropTypes.shape({}).isRequired,
125
- changeLanguageUrl: PropTypes.string,
126
- logoutUri: PropTypes.string.isRequired,
127
- };
128
-
129
- AUProfileWidgetComponent.displayName = 'AUProfileWidgetComponent';
130
- 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
+ >
28
+ {s.text}
29
+ </a>
30
+ );
31
+ }
32
+ return (
33
+ <button
34
+ key={s.text}
35
+ ref={btnRef}
36
+ type="button"
37
+ disabled={s.disabled}
38
+ className={`sub-nav__item ${s.classNames}`}
39
+ onClick={() => s.onClick(btnRef.current)}
40
+ data-icon={s.icon}
41
+ data-gtm={s.dataGtm}
42
+ >
43
+ {s.text}
44
+ </button>
45
+ );
46
+ });
47
+
48
+ useEffect(() => {
49
+ if (auid > 0 && !ctcSet) {
50
+ setCopyToClipboard(lang);
51
+ setCtcSet(true);
52
+ }
53
+ });
54
+
55
+ return (
56
+ <div className="sub-nav__content theme--normal" aria-labelledby="profile-menu-toggle">
57
+ <div className="sub-nav__user">
58
+ <h2 className="sub-nav__user-name">{name}</h2>
59
+ <button
60
+ type="button"
61
+ className="copy-to-clipboard"
62
+ title={profileLabels[lang].copyAuid}
63
+ aria-label={`${profileLabels[lang].auId}: AU${auid}`}
64
+ data-gtm="au-btn-header-copy-auid"
65
+ >
66
+ {`${profileLabels[lang].auId}: `}
67
+ <span className="copy-to-clipboard__this">{`AU${auid}`}</span>
68
+ </button>
69
+ {
70
+ studentNumber && (
71
+ <button
72
+ type="button"
73
+ className="copy-to-clipboard"
74
+ title={profileLabels[lang].copyStudentNumber}
75
+ aria-label={`${profileLabels[lang].studentNumber}: ${studentNumber}`}
76
+ >
77
+ {`${profileLabels[lang].studentNumber}: `}
78
+ <span className="copy-to-clipboard__this">{studentNumber}</span>
79
+ </button>
80
+ )
81
+ }
82
+ </div>
83
+ <hr />
84
+ {renderSettings}
85
+ <hr />
86
+ {
87
+ changeLanguageUrl && (
88
+ <>
89
+ <a className="sub-nav__item sub-nav__item--icon" href={changeLanguageUrl} data-icon="" data-gtm="au-btn-header-profile-changelanguage">{profileLabels[lang].changeLanguage}</a>
90
+ <hr />
91
+ </>
92
+ )
93
+ }
94
+ <a
95
+ className="sub-nav__item sub-nav__item--icon"
96
+ data-icon=""
97
+ data-gtm="au-a-header-signout"
98
+ href={logoutUri}
99
+ >
100
+ {profileLabels[lang].logout}
101
+ </a>
102
+ </div>
103
+ );
104
+ });
105
+
106
+ AUProfileWidgetComponent.defaultProps = {
107
+ studentNumber: null,
108
+ changeLanguageUrl: '',
109
+ };
110
+
111
+ AUProfileWidgetComponent.propTypes = {
112
+ lang: PropTypes.string.isRequired,
113
+ name: PropTypes.string.isRequired,
114
+ auid: PropTypes.number.isRequired,
115
+ studentNumber: PropTypes.string,
116
+ settings: PropTypes.arrayOf(PropTypes.shape({
117
+ type: PropTypes.string.isRequired,
118
+ url: PropTypes.string,
119
+ text: PropTypes.string.isRequired,
120
+ onClick: PropTypes.func,
121
+ classNames: PropTypes.string,
122
+ icon: PropTypes.string,
123
+ })).isRequired,
124
+ profileLabels: PropTypes.shape({}).isRequired,
125
+ changeLanguageUrl: PropTypes.string,
126
+ logoutUri: PropTypes.string.isRequired,
127
+ };
128
+
129
+ AUProfileWidgetComponent.displayName = 'AUProfileWidgetComponent';
130
+ export default AUProfileWidgetComponent;