diff --git a/app/resources/js/views/projects/NewProjectDialog.vue b/app/resources/js/views/projects/NewProjectDialog.vue
index cdf3bf48..29c24ff2 100644
--- a/app/resources/js/views/projects/NewProjectDialog.vue
+++ b/app/resources/js/views/projects/NewProjectDialog.vue
@@ -136,38 +136,15 @@
/>
- Вы выбрали всю Россию — проект будет получать лиды по всем регионам (всем субъектам РФ).
- Подтвердите, что это намеренно.
-
-
- Подтверждаю «Вся РФ»
-
- Отмена
-
-
-
-
- Вся РФ — подтверждено
-
+ Проект будет получать лиды по всей России — по всем субъектам страны.
+
(null);
-// Plan 4 Task 4: обязательный выбор региона + явная «Вся РФ» с подтверждением.
-// vsyaRf — чекбокс выбран; vsyaRfConfirmed — подтверждён через предупреждение.
+// Plan 4 Task 4 + косяк 03: явная «Вся РФ» одной галочкой (защита от случайной
+// «всей РФ» сохранена — нужен осознанный клик), без отдельной кнопки подтверждения.
+// vsyaRf — чекбокс выбран; vsyaRfConfirmed — true сразу при установке галочки.
// На бэке regions=[] (Вся РФ) и «забыл» неотличимы → гейт намеренно UI-only.
const vsyaRf = ref(false);
const vsyaRfConfirmed = ref(false);
function chooseVsyaRf(): void {
vsyaRf.value = true;
- vsyaRfConfirmed.value = false;
+ confirmVsyaRf();
}
function confirmVsyaRf(): void {
vsyaRfConfirmed.value = true;
form.regions = []; // Вся РФ → пустой массив субъектов
- delete errors.regions;
+ delete errors.regions; // косяк 03: галочка сразу снимает зависшую ошибку
}
function cancelVsyaRf(): void {
diff --git a/app/tests/Frontend/NewProjectDialog.regions.spec.ts b/app/tests/Frontend/NewProjectDialog.regions.spec.ts
index 7375b870..acde6cbe 100644
--- a/app/tests/Frontend/NewProjectDialog.regions.spec.ts
+++ b/app/tests/Frontend/NewProjectDialog.regions.spec.ts
@@ -48,16 +48,15 @@ describe('NewProjectDialog — required region gate + «Вся РФ» (Plan 4 Ta
expect(w.text()).toContain('Выберите регион');
});
- it('«Вся РФ» shows warning, requires confirm, then submits regions=[]', async () => {
+ it('косяк 03: «Вся РФ» одной галочкой подтверждает и сабмитит regions=[]', async () => {
const w = factory();
await flushPromises();
(w.vm as unknown as { chooseVsyaRf: () => void }).chooseVsyaRf();
await w.vm.$nextTick();
- expect(w.text()).toContain('всю Россию');
-
- await w.find('[data-testid="confirm-vsya-rf"]').trigger('click');
- await w.vm.$nextTick();
+ // Одношаговое подтверждение: галочка сразу подтверждает, без отдельной кнопки.
+ expect((w.vm as unknown as { vsyaRfConfirmed: boolean }).vsyaRfConfirmed).toBe(true);
+ expect(w.text()).toContain('по всей России');
const vm = w.vm as unknown as { form: { name: string; signal_identifier: string } };
vm.form.name = 'Проект';
@@ -73,6 +72,21 @@ describe('NewProjectDialog — required region gate + «Вся РФ» (Plan 4 Ta
expect(payload.regions).toEqual([]);
});
+ it('косяк 03: галочка «Вся РФ» сразу снимает зависшую ошибку регионов', async () => {
+ const w = factory();
+ await flushPromises();
+
+ // сабмит с пустыми регионами → ошибка «Выберите регион…»
+ await w.find('[data-testid="submit-btn"]').trigger('click');
+ await flushPromises();
+ expect(w.text()).toContain('Выберите регион');
+
+ // ставим «Вся РФ» → ошибка исчезает сразу, без отдельного подтверждения
+ (w.vm as unknown as { chooseVsyaRf: () => void }).chooseVsyaRf();
+ await w.vm.$nextTick();
+ expect(w.text()).not.toContain('Выберите регион');
+ });
+
it('region autocomplete has closable-chips so a single region can be removed', async () => {
const w = factory();
await flushPromises();