Skip to content

Commit 9125ca6

Browse files
committed
bug fix for -ve rows in test data and tippy on generator
1 parent e2b85de commit 9125ca6

4 files changed

Lines changed: 83 additions & 6 deletions

File tree

packages/core-ui/js/gui_components/data-generator-page.js

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -576,6 +576,7 @@ class DataGeneratorPage {
576576
}
577577

578578
toggleSchemaEditMode() {
579+
this.hideVisibleHelpTooltips();
579580
if (this.isTextMode) {
580581
const textArea = this.documentObj.getElementById('generatorSchemaText');
581582
const parsed = this.parseSchemaTextToRows(textArea?.value || '');
@@ -597,6 +598,14 @@ class DataGeneratorPage {
597598
this.updateSchemaEditModeView();
598599
}
599600

601+
hideVisibleHelpTooltips() {
602+
const modeHelpIcon = this.documentObj.getElementById('schemaModeHelpIcon');
603+
modeHelpIcon?._tippy?.hide?.();
604+
605+
const tippyFn = this.documentObj?.defaultView?.tippy || globalThis?.tippy;
606+
tippyFn?.hideAll?.({ duration: 0 });
607+
}
608+
600609
updateSchemaEditModeView() {
601610
const rowsContainer = this.documentObj.getElementById('generatorSchemaRows');
602611
const textContainer = this.documentObj.getElementById('generatorSchemaTextContainer');
@@ -614,7 +623,9 @@ class DataGeneratorPage {
614623
}
615624
toggleButton.textContent = inTextMode ? 'Edit as Schema' : 'Edit as Text';
616625
if (modeHelpIcon) {
617-
modeHelpIcon.setAttribute('data-help-text', this.buildSchemaModeHelpHtml(inTextMode));
626+
const modeHelpHtml = this.buildSchemaModeHelpHtml(inTextMode);
627+
modeHelpIcon.setAttribute('data-help-text', modeHelpHtml);
628+
modeHelpIcon._tippy?.setContent?.(modeHelpHtml);
618629
}
619630
if (typeof window !== 'undefined' && typeof window.updateHelpHints === 'function') {
620631
window.updateHelpHints();
@@ -648,21 +659,20 @@ class DataGeneratorPage {
648659
return `
649660
<p><strong>Edit as Schema</strong></p>
650661
<p>You are currently editing as text. Click <strong>Edit as Schema</strong> to return to row-based editing.</p>
651-
<button type="button" class="generator-schema-sample-button">Insert Example Schema</button>
652662
<p>Text schema uses name/rule pairs, for example:</p>
653663
<pre>First Name
654664
person.firstName
655665
656666
Status
657667
enum(active,inactive,pending)</pre>
658-
<p><a class="helplink" href="${GENERATE_TO_FILE_HELP_URL}" target="_blank" rel="noopener noreferrer">Generate To File docs</a></p>
668+
<button type="button" class="generator-schema-sample-button">Insert Example Schema</button>
659669
`;
660670
}
661671
return `
662672
<p><strong>Edit as Text</strong></p>
663673
<p>You are currently using row-based schema editing. Click <strong>Edit as Text</strong> to switch to text schema mode.</p>
664-
<button type="button" class="generator-schema-sample-button">Insert Example Schema</button>
665674
<p><a class="helplink" href="${GENERATE_TO_FILE_HELP_URL}" target="_blank" rel="noopener noreferrer">Generate To File docs</a></p>
675+
<button type="button" class="generator-schema-sample-button">Insert Example Schema</button>
666676
`;
667677
}
668678

packages/core-ui/js/gui_components/testdatadefn.js

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -204,7 +204,10 @@ async function generateTestData() {
204204
return;
205205
}
206206

207-
if (!Number.isFinite(desiredRowCountParsed) || desiredRowCountParsed < 0) {
207+
if (
208+
!Number.isFinite(desiredRowCountParsed) ||
209+
(desiredRowCountParsed < 1 && generationMode !== TEST_DATA_MODES.AMEND_SELECTED)
210+
) {
208211
alert('Enter how many rows to generate.');
209212
setTestDataStatus('Invalid row count.', false);
210213
return;
@@ -815,7 +818,7 @@ function enableTestDataGenerationInterface(parentId, anImporter, aTextPreviewRen
815818
<button id="generatedata">Generate</button>
816819
<button id="generateallpairs" style="display:none;">Generate Pairwise</button>
817820
<button id="refreshtestdatapreview">Refresh Text Preview</button>
818-
<label> How Many?<input type="number" id="generateCount"/></label>
821+
<label> How Many?<input type="number" id="generateCount" min="1" step="1"/></label>
819822
<label><input type="radio" name="testDataGenerationMode" value="${TEST_DATA_MODES.NEW_TABLE}" checked>New Table</label>
820823
<label><input type="radio" name="testDataGenerationMode" value="${TEST_DATA_MODES.AMEND_TABLE}">Amend Table</label>
821824
<label><input type="radio" name="testDataGenerationMode" value="${TEST_DATA_MODES.AMEND_SELECTED}">Amend Selected</label>
@@ -843,6 +846,14 @@ function enableTestDataGenerationInterface(parentId, anImporter, aTextPreviewRen
843846
document.querySelector('#refreshtestdatapreview').addEventListener('click', refreshTestDataPreview, false);
844847
const generateCountInput = document.getElementById('generateCount');
845848
generateCountInput.value = '1';
849+
generateCountInput.setAttribute('min', '1');
850+
generateCountInput.setAttribute('step', '1');
851+
generateCountInput.addEventListener('input', () => {
852+
const parsedCount = Number.parseInt(generateCountInput.value, 10);
853+
if (!Number.isFinite(parsedCount) || parsedCount < 1) {
854+
generateCountInput.value = '1';
855+
}
856+
});
846857

847858
parentElem.querySelectorAll('input[name="testDataGenerationMode"]').forEach((modeRadio) => {
848859
modeRadio.addEventListener('change', () => {

packages/core-ui/js/help/help-tooltips.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,10 @@ function createUpdateHelpHints(documentObj) {
2929
return;
3030
}
3131

32+
documentObj.querySelectorAll('.helpicon[data-help]').forEach((element) => {
33+
element?._tippy?.destroy?.();
34+
});
35+
3236
tippyFn('.helpicon[data-help]', {
3337
content(reference) {
3438
const id = reference.getAttribute('data-help');

packages/core-ui/src/tests/generator/data-generator-page.test.js

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -842,6 +842,58 @@ describe('DataGeneratorPage', () => {
842842
expect(page.schemaRows[0].sourceType).toBe('regex');
843843
});
844844

845+
test('toggle clears visible help tooltips before switching schema mode', () => {
846+
const hideAll = jest.fn();
847+
window.tippy = { hideAll };
848+
849+
const page = new DataGeneratorPage({
850+
parentElement: document.getElementById('app'),
851+
documentObj: document,
852+
alertFn,
853+
faker: { word: { noun: () => 'x' } },
854+
RandExp: function RandExp() {},
855+
TabulatorCtor: FakeTabulator,
856+
GridExtensionClass: FakeGridExtension,
857+
ExporterClass: FakeExporter,
858+
DownloadClass: FakeDownload,
859+
TestDataGeneratorClass: FakeTestDataGenerator,
860+
});
861+
page.init();
862+
863+
const hideInstance = jest.fn();
864+
document.getElementById('schemaModeHelpIcon')._tippy = { hide: hideInstance };
865+
document.getElementById('schemaModeToggleButton').click();
866+
867+
expect(hideInstance).toHaveBeenCalledTimes(1);
868+
expect(hideAll).toHaveBeenCalledWith({ duration: 0 });
869+
});
870+
871+
test('schema mode help shows docs link only for Edit as Text and keeps sample button at end', () => {
872+
const page = new DataGeneratorPage({
873+
parentElement: document.getElementById('app'),
874+
documentObj: document,
875+
alertFn,
876+
faker: { word: { noun: () => 'x' } },
877+
RandExp: function RandExp() {},
878+
TabulatorCtor: FakeTabulator,
879+
GridExtensionClass: FakeGridExtension,
880+
ExporterClass: FakeExporter,
881+
DownloadClass: FakeDownload,
882+
TestDataGeneratorClass: FakeTestDataGenerator,
883+
});
884+
page.init();
885+
886+
const helpIcon = document.getElementById('schemaModeHelpIcon');
887+
const editAsTextHtml = helpIcon.getAttribute('data-help-text');
888+
expect(editAsTextHtml).toContain('Generate To File docs');
889+
expect(editAsTextHtml.trim().endsWith('Insert Example Schema</button>')).toBe(true);
890+
891+
document.getElementById('schemaModeToggleButton').click();
892+
const editAsSchemaHtml = helpIcon.getAttribute('data-help-text');
893+
expect(editAsSchemaHtml).not.toContain('Generate To File docs');
894+
expect(editAsSchemaHtml.trim().endsWith('Insert Example Schema</button>')).toBe(true);
895+
});
896+
845897
test('text mode preserves comments while schema rows exclude them', () => {
846898
const page = new DataGeneratorPage({
847899
parentElement: document.getElementById('app'),

0 commit comments

Comments
 (0)