@financial-times/n-myft-ui 31.0.1 → 31.0.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.
@@ -9,6 +9,13 @@ const renderError = ({ message, preferencesModal }) => {
|
|
9
9
|
errorElement.innerHTML = message;
|
10
10
|
};
|
11
11
|
|
12
|
+
const removeError = ({ preferencesModal }) => {
|
13
|
+
renderError({
|
14
|
+
message: "",
|
15
|
+
preferencesModal,
|
16
|
+
});
|
17
|
+
}
|
18
|
+
|
12
19
|
/**
|
13
20
|
* This preference modal is part of a test
|
14
21
|
* Therefore we have built the positioning function to work within the known parameters of that test
|
@@ -78,6 +85,7 @@ const tracking = (conceptId) => {
|
|
78
85
|
const preferenceModalHide = ({ event, preferencesModal }) => {
|
79
86
|
if (!preferencesModal.contains(event.detail.targetElement)) {
|
80
87
|
preferencesModal.classList.remove('n-myft-ui__preferences-modal--show');
|
88
|
+
removeError({ preferencesModal });
|
81
89
|
}
|
82
90
|
};
|
83
91
|
|
@@ -91,23 +99,25 @@ const preferenceModalShowAndHide = ({ event, preferencesModal, conceptId }) => {
|
|
91
99
|
|
92
100
|
} else {
|
93
101
|
// Remove existing errors when hiding the modal
|
94
|
-
|
95
|
-
message: '',
|
96
|
-
preferencesModal,
|
97
|
-
});
|
102
|
+
removeError({ preferencesModal });
|
98
103
|
}
|
99
104
|
};
|
100
105
|
|
101
106
|
const removeTopic = async ({ event, conceptId, preferencesModal }) => {
|
102
107
|
event.target.setAttribute('disabled', true);
|
103
108
|
|
109
|
+
// remove error message before attempt to remove topic
|
110
|
+
removeError({ preferencesModal });
|
111
|
+
|
104
112
|
try {
|
105
113
|
await myFtClient.remove('user', null, 'followed', 'concept', conceptId, { token: csrfToken });
|
106
114
|
preferenceModalShowAndHide({ preferencesModal });
|
107
115
|
} catch (error) {
|
108
|
-
renderError({
|
116
|
+
renderError({
|
117
|
+
message: 'Sorry, we are unable to remove this topic. Please try again later or try from <a href="/myft">myFT</a>',
|
118
|
+
preferencesModal,
|
119
|
+
});
|
109
120
|
}
|
110
|
-
|
111
121
|
event.target.removeAttribute('disabled');
|
112
122
|
};
|
113
123
|
|
@@ -175,6 +185,9 @@ const toggleInstantAlertsPreference = async ({ event, conceptId, preferencesModa
|
|
175
185
|
|
176
186
|
instantAlertsCheckbox.setAttribute('disabled', true);
|
177
187
|
|
188
|
+
// remove error message before attempt to toggle instant alert
|
189
|
+
removeError({ preferencesModal });
|
190
|
+
|
178
191
|
const data = {
|
179
192
|
token: csrfToken
|
180
193
|
};
|
@@ -194,7 +207,7 @@ const toggleInstantAlertsPreference = async ({ event, conceptId, preferencesModa
|
|
194
207
|
} catch (error) {
|
195
208
|
renderError({
|
196
209
|
message: 'Sorry, we are unable to change your instant alert preference. Please try again later or try from <a href="/myft">myFT</a>',
|
197
|
-
preferencesModal
|
210
|
+
preferencesModal,
|
198
211
|
});
|
199
212
|
|
200
213
|
instantAlertsCheckbox.checked = instantAlertsCheckbox.checked
|
@@ -47,14 +47,39 @@
|
|
47
47
|
color: oColorsByName('claret-60');
|
48
48
|
}
|
49
49
|
|
50
|
+
.n-myft-ui__preferences-modal__remove-button:disabled {
|
51
|
+
opacity: 0.5;
|
52
|
+
}
|
53
|
+
|
50
54
|
.n-myft-ui__preferences-modal--show {
|
51
55
|
display: block;
|
52
56
|
visibility: visible;
|
53
57
|
}
|
54
58
|
|
59
|
+
// reference to the color/BG color of the error message
|
60
|
+
// components/o-message/src/scss/_brand.scss#L21 in origami
|
55
61
|
.n-myft-ui__preferences-modal-error {
|
56
62
|
display: block;
|
57
63
|
@include oTypographySans($scale: -1, $weight: 'regular', $style: 'normal');
|
58
|
-
color:
|
59
|
-
|
64
|
+
color: oColorsMix('black', 'crimson', $percentage: 12.5);
|
65
|
+
background-color: oColorsMix('crimson', $percentage: 10);
|
66
|
+
text-align: left;
|
67
|
+
padding: 8px 12px;
|
68
|
+
margin-top: 16px;
|
69
|
+
|
70
|
+
// use opacity to enforce CSS transition
|
71
|
+
opacity: 1;
|
72
|
+
transition: opacity 0.5s;
|
73
|
+
|
74
|
+
a {
|
75
|
+
@include oTypographySans($scale: -1, $weight: 'semibold', $style: 'normal');
|
76
|
+
color: oColorsMix('black', 'crimson', $percentage: 12.5);
|
77
|
+
text-decoration-color: oColorsMix('black', 'crimson', $percentage: 12.5);
|
78
|
+
}
|
79
|
+
}
|
80
|
+
|
81
|
+
.n-myft-ui__preferences-modal-error:empty {
|
82
|
+
opacity: 0;
|
83
|
+
padding: 0;
|
84
|
+
margin-top: 0;
|
60
85
|
}
|