Skip to content

Commit 8a84aa2

Browse files
committed
Merge branch 'dev'
2 parents d95a881 + be02c26 commit 8a84aa2

9 files changed

Lines changed: 477 additions & 240 deletions

dist/doboard-widget-bundle.js

Lines changed: 226 additions & 9 deletions
Large diffs are not rendered by default.

dist/doboard-widget-bundle.min.js

Lines changed: 9 additions & 7 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

dist/doboard-widget-bundle.min.js.map

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

js/src/api.js

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -151,7 +151,7 @@ const attachmentAddDoboard = async (fileData) => {
151151
// @ToDo need to handle result?
152152
};
153153

154-
const registerUserDoboard = async (projectToken, accountId, email, nickname, pageURL) => {
154+
const registerUserDoboard = async (projectToken, accountId, email, nickname) => {
155155
let data = {
156156
project_token: projectToken,
157157
account_id: accountId,
@@ -367,6 +367,17 @@ const userUpdateDoboard = async (projectToken, accountId, sessionId, userId, tim
367367
};
368368
};
369369

370+
const getProjectDoboard = async (projectToken, accountId) => {
371+
const sessionId = localStorage.getItem('spotfix_session_id');
372+
const data = {
373+
project_token: projectToken,
374+
};
375+
if (sessionId) {
376+
data.session_id = sessionId;
377+
}
378+
return await spotfixApiCall(data, 'project_get', accountId);
379+
};
380+
370381
const getReleaseVersion = async () => {
371382
try {
372383
const res = await fetch('https://api.github.com/repos/CleanTalk/SpotFix/tags');

js/src/handlers.js

Lines changed: 65 additions & 2 deletions
Large diffs are not rendered by default.

js/src/loaders/SpotFixTemplatesLoader.js

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -157,12 +157,12 @@ class SpotFixTemplatesLoader {
157157
<label class="spotfix_placeholder_title" for="doboard_task_widget-title">Report about</label>
158158
</div>
159159
160-
<div class="doboard_task_widget-input-container doboard_task_widget-input-container-textarea" style="flex-grow: 1; min-height: 200px">
160+
<div id="doboard_task_widget-description-container" class="doboard_task_widget-input-container doboard_task_widget-input-container-textarea" style="flex-grow: 1; min-height: 200px">
161161
<textarea id="doboard_task_widget-description" class="doboard_task_widget-field" name="description" placeholder=" " required></textarea>
162162
<label for="doboard_task_widget-description" class="doboard_task_widget-field-textarea-label" >Description</label>
163163
</div>
164164
165-
<div class="doboard_task_widget-login" style="margin-top: 12px; margin-bottom: 4px">
165+
<div class="doboard_task_widget-login">
166166
167167
<span class="doboard_task_widget-login-icon" >Sign up here to receive notifications.</span>
168168
@@ -178,11 +178,13 @@ class SpotFixTemplatesLoader {
178178
<input id="doboard_task_widget-user_email" class="doboard_task_widget-field" type="email" name="user_email">
179179
<label for="doboard_task_widget-user_email">Email</label>
180180
</div>
181-
181+
182182
<div class="doboard_task_widget-input-container hidden">
183183
<input id="doboard_task_widget-user_password" class="doboard_task_widget-field" type="password" name="user_password">
184184
<label for="doboard_task_widget-user_password">Password</label>
185185
</div>
186+
187+
<button id="doboard_task_widget-register_only_button" class="doboard_task_widget-submit_button doboard_task_widget-hidden" style="margin-top: 8px; width: 100%;">Sign up</button>
186188
187189
<i>Note about DoBoard register and accepting email notifications about tasks have to be here.</i>
188190
</br>

js/src/main.js

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,21 @@ function spotFixInit() {
1616
new SpotFixSourcesLoader();
1717
new CleanTalkWidgetDoboard({}, 'wrap');
1818
loadBotDetector();
19+
20+
const projectToken = localStorage.getItem('spotfix_project_token');
21+
const accountId = localStorage.getItem('spotfix_company_id');
22+
if (projectToken && accountId) {
23+
getProjectDoboard(projectToken, accountId)
24+
.then(result => {
25+
if (result && result?.projects && result?.projects[0]) {
26+
const project = result?.projects[0];
27+
if (project?.require_full_registration !== undefined) {
28+
localStorage.setItem('spotfix_require_full_registration', project?.require_full_registration);
29+
}
30+
}
31+
})
32+
.catch(err => console.error('project_get error:', err));
33+
}
1934
}
2035

2136
function loadBotDetector() {
@@ -190,7 +205,7 @@ function getTaskFullDetails(tasksDetails, taskId) {
190205
const commentAttachments = attachments
191206
.filter(att => String(att.commentId) === String(comment.commentId))
192207
.sort((a, b) => (a.attachmentOrder || 0) - (b.attachmentOrder || 0));
193-
208+
194209
return {
195210
commentAuthorAvatarSrc: getAvatarSrc(author),
196211
commentAuthorName: getAuthorName(author),

js/src/widget.js

Lines changed: 127 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -468,6 +468,8 @@ class CleanTalkWidgetDoboard {
468468
submitButton.closest('.doboard_task_widget-field').classList.remove('doboard_task_widget-hidden');
469469
}
470470

471+
await this.createWidgetElement('create_issue');
472+
471473
} catch (error) {
472474
document.querySelector('.doboard_task_widget-login-is-invalid').classList.remove('doboard_task_widget-hidden');
473475
}
@@ -519,6 +521,86 @@ class CleanTalkWidgetDoboard {
519521
}
520522
})
521523
}
524+
525+
const registerOnlyButton = document.getElementById('doboard_task_widget-register_only_button');
526+
if (registerOnlyButton) {
527+
registerOnlyButton.addEventListener('click', async () => {
528+
const userNameElement = document.getElementById('doboard_task_widget-user_name');
529+
const userEmailElement = document.getElementById('doboard_task_widget-user_email');
530+
531+
const userName = userNameElement?.value?.trim();
532+
const userEmail = userEmailElement?.value?.trim();
533+
const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
534+
535+
if (!userName) {
536+
userNameElement.style.borderColor = 'red';
537+
userNameElement.focus();
538+
userNameElement.addEventListener('input', function() {
539+
this.style.borderColor = '';
540+
});
541+
return;
542+
}
543+
544+
// Validate email
545+
if (!userEmail) {
546+
userEmailElement.style.borderColor = 'red';
547+
userEmailElement.focus();
548+
userEmailElement.addEventListener('input', function() {
549+
this.style.borderColor = '';
550+
});
551+
return;
552+
} else if (!emailRegex.test(userEmail)) {
553+
userEmailElement.style.borderColor = 'red';
554+
userEmailElement.focus();
555+
userEmailElement.addEventListener('input', function() {
556+
this.style.borderColor = '';
557+
});
558+
return;
559+
}
560+
561+
registerOnlyButton.disabled = true;
562+
registerOnlyButton.innerText = 'Signing up...';
563+
564+
try {
565+
const taskDetails = {
566+
userName: userName,
567+
userEmail: userEmail,
568+
projectToken: this.params.projectToken,
569+
accountId: this.params.accountId,
570+
};
571+
572+
const response = await registerUser(taskDetails)(this.registrationShowMessage);
573+
574+
if (response && response.accountExists) {
575+
const loginContainer = document.getElementById('doboard_task_widget-input-container-login');
576+
const phantomContainer = document.querySelector('.doboard_task_widget-input-container-phantom');
577+
const loginEmailElement = document.getElementById('doboard_task_widget-login_email');
578+
579+
if (phantomContainer) {
580+
phantomContainer.classList.add('doboard_task_widget-hidden');
581+
}
582+
if (loginContainer) {
583+
loginContainer.classList.remove('doboard_task_widget-hidden');
584+
}
585+
if (loginEmailElement && userEmail) {
586+
loginEmailElement.value = userEmail;
587+
loginEmailElement.classList.add('has-value');
588+
}
589+
registerOnlyButton.classList.add('doboard_task_widget-hidden');
590+
591+
this.registrationShowMessage('Account already exists. Please login with your password.', 'notice');
592+
} else if (localStorage.getItem('spotfix_session_id')) {
593+
// Redraw widget after successful registration
594+
await this.createWidgetElement('create_issue');
595+
}
596+
} catch (error) {
597+
this.registrationShowMessage(error.message, 'error');
598+
}
599+
600+
registerOnlyButton.disabled = false;
601+
registerOnlyButton.innerText = 'Sign up';
602+
});
603+
}
522604
}
523605

524606
/**
@@ -675,6 +757,41 @@ class CleanTalkWidgetDoboard {
675757
document.querySelector('.doboard_task_widget-login').classList.add('hidden');
676758
}
677759

760+
const requireFullRegistration = localStorage.getItem('spotfix_require_full_registration') === '1';
761+
const titleContainer = document.getElementById('doboard_task_widget-title')?.closest('.doboard_task_widget-input-container');
762+
const descriptionContainer = document.getElementById('doboard_task_widget-description-container');
763+
const requireFullRegistrationMessage = document.getElementById('doboard_task_widget-require_full_registration');
764+
const submitButtonContainer = document.getElementById('doboard_task_widget-submit_button')?.closest('.doboard_task_widget-field');
765+
const visibilityToggle = document.querySelector('.doboard_task_widget-visibility-toggle');
766+
767+
const registerOnlyButton = document.getElementById('doboard_task_widget-register_only_button');
768+
769+
if (requireFullRegistration && !sessionIdExists) {
770+
if (titleContainer) titleContainer.style.display = '';
771+
if (descriptionContainer) descriptionContainer.style.display = '';
772+
if (submitButtonContainer) submitButtonContainer.style.display = 'none';
773+
if (visibilityToggle) visibilityToggle.style.display = 'none';
774+
if (requireFullRegistrationMessage) requireFullRegistrationMessage.classList.remove('doboard_task_widget-hidden');
775+
const loginSection = document.querySelector('.doboard_task_widget-login');
776+
if (loginSection) loginSection.classList.add('active');
777+
// Hide login accordion icon when require_full_registration
778+
const loginIcon = document.querySelector('.doboard_task_widget-login-icon');
779+
if (loginIcon) loginIcon.classList.add('doboard_task_widget-login-icon-hidden');
780+
// Show register only button
781+
if (registerOnlyButton) registerOnlyButton.classList.remove('doboard_task_widget-hidden');
782+
} else {
783+
if (titleContainer) titleContainer.style.display = '';
784+
if (descriptionContainer) descriptionContainer.style.display = '';
785+
if (submitButtonContainer) submitButtonContainer.style.display = '';
786+
if (visibilityToggle) visibilityToggle.style.display = '';
787+
if (requireFullRegistrationMessage) requireFullRegistrationMessage.classList.add('doboard_task_widget-hidden');
788+
// Show login accordion icon when not require_full_registration
789+
const loginIcon = document.querySelector('.doboard_task_widget-login-icon');
790+
if (loginIcon) loginIcon.classList.remove('doboard_task_widget-login-icon-hidden');
791+
// Hide register only button
792+
if (registerOnlyButton) registerOnlyButton.classList.add('doboard_task_widget-hidden');
793+
}
794+
678795
if (
679796
selection.type === 'Range'
680797
) {
@@ -1614,7 +1731,16 @@ class CleanTalkWidgetDoboard {
16141731
if ( accordionController ) {
16151732
const context = this;
16161733
accordionController.addEventListener('click', function() {
1617-
this.closest('.doboard_task_widget-login').classList.toggle('active');
1734+
const loginSection = this.closest('.doboard_task_widget-login');
1735+
const requireFullRegistration = localStorage.getItem('spotfix_require_full_registration') === '1';
1736+
const sessionIdExists = !!localStorage.getItem('spotfix_session_id');
1737+
1738+
if (requireFullRegistration && !sessionIdExists) {
1739+
loginSection.classList.add('active');
1740+
} else {
1741+
loginSection.classList.toggle('active');
1742+
}
1743+
16181744
// Scroll
16191745
context.positionWidgetContainer();
16201746
setTimeout(() => {

0 commit comments

Comments
 (0)