diff --git a/app/client/components/DataTables.ts b/app/client/components/DataTables.ts index 46598113..bd9e93f2 100644 --- a/app/client/components/DataTables.ts +++ b/app/client/components/DataTables.ts @@ -482,5 +482,6 @@ const cssFlexRow = styled('div', ` `); const cssRenamableTableName = styled('div', ` + align-items: center; flex: initial; `); diff --git a/sandbox/grist/useractions.py b/sandbox/grist/useractions.py index 0f56dbcb..e3524be2 100644 --- a/sandbox/grist/useractions.py +++ b/sandbox/grist/useractions.py @@ -460,7 +460,7 @@ class UserActions(object): table_id == "_grist_Views_section" and any(rec.isRaw for i, rec in self._bulk_action_iter(table_id, row_ids)) ): - allowed_fields = {"title", "options", "sortColRefs", "rules"} + allowed_fields = {"title", "description", "options", "sortColRefs", "rules"} has_summary_section = any(rec.tableRef.summarySourceTable for i, rec in self._bulk_action_iter(table_id, row_ids)) if has_summary_section: diff --git a/test/nbrowser/RawData.ts b/test/nbrowser/RawData.ts index 815d5664..8b200975 100644 --- a/test/nbrowser/RawData.ts +++ b/test/nbrowser/RawData.ts @@ -108,6 +108,36 @@ describe('RawData', function () { assert.deepEqual(tables, ['Town', 'Empire', 'CountryLanguage', 'Table1'].sort()); }); + it('should show table description', async function () { + // Give Empire table a description. + await gu.renameRawTable('Empire', undefined, 'My raw data table description.'); + + // Check that a description icon tooltip is shown next to the title. + await driver.findContent('.test-raw-data-table-title', 'Empire') + .find('.test-widget-info-tooltip') + .click(); + await gu.waitToPass(async () => { + assert.isTrue(await driver.find('.test-widget-info-tooltip-popup').isDisplayed()); + }); + assert.equal( + await driver.find('.test-widget-info-tooltip-popup').getText(), + 'My raw data table description.' + ); + + // Open Empire table and check that the tooltip is shown there as well. + await driver.findContent('.test-raw-data-table-title', 'Empire').click(); + await gu.waitForServer(); + await driver.find('.test-viewsection-title .test-widget-info-tooltip').click(); + await gu.waitToPass(async () => { + assert.isTrue(await driver.find('.test-widget-info-tooltip-popup').isDisplayed()); + }); + assert.equal( + await driver.find('.test-widget-info-tooltip-popup').getText(), + 'My raw data table description.' + ); + await gu.closeRawTable(); + }); + it('should remove table', async function () { // Open menu for Town await openMenu('Town'); diff --git a/test/nbrowser/gristUtils.ts b/test/nbrowser/gristUtils.ts index 1e114b22..a8f75360 100644 --- a/test/nbrowser/gristUtils.ts +++ b/test/nbrowser/gristUtils.ts @@ -1531,16 +1531,25 @@ export async function openRawTable(tableId: string) { await driver.find(`.test-raw-data-table .test-raw-data-table-id-${tableId}`).click(); } -export async function renameRawTable(tableId: string, newName: string) { +export async function renameRawTable(tableId: string, newName?: string, newDescription?: string) { await driver.find(`.test-raw-data-table .test-raw-data-table-id-${tableId}`) .findClosest('.test-raw-data-table') .find('.test-raw-data-table-menu') .click(); await driver.find('.test-raw-data-menu-rename-table').click(); - const input = await driver.find(".test-widget-title-table-name-input"); - await input.doClear(); - await input.click(); - await driver.sendKeys(newName, Key.ENTER); + if (newName !== undefined) { + const input = await driver.find(".test-widget-title-table-name-input"); + await input.doClear(); + await input.click(); + await driver.sendKeys(newName); + } + if (newDescription !== undefined) { + const input = await driver.find(".test-widget-title-section-description-input"); + await input.doClear(); + await input.click(); + await driver.sendKeys(newDescription); + } + await driver.find(".test-widget-title-save").click(); await waitForServer(); }