Skip to content

V16: Removes all generic Created, Saved, and Deleted notifications #19119

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 12 commits into from
Apr 24, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,10 +1,8 @@
import { UmbRepositoryBase } from '../repository-base.js';

Check notice on line 1 in src/Umbraco.Web.UI.Client/src/packages/core/repository/detail/detail-repository-base.ts

View check run for this annotation

CodeScene Delta Analysis / CodeScene Cloud Delta Analysis (v16/dev)

✅ No longer an issue: Overall Code Complexity

The mean cyclomatic complexity in this module is no longer above the threshold
import type { UmbRepositoryResponse, UmbRepositoryResponseWithAsObservable } from '../types.js';
import type { UmbDetailDataSource, UmbDetailDataSourceConstructor } from './detail-data-source.interface.js';
import type { UmbDetailRepository } from './detail-repository.interface.js';
import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api';
import type { UmbNotificationContext, UmbNotificationHandler } from '@umbraco-cms/backoffice/notification';
import { UMB_NOTIFICATION_CONTEXT } from '@umbraco-cms/backoffice/notification';
import type { UmbContextToken } from '@umbraco-cms/backoffice/context-api';
import type { UmbDetailStore } from '@umbraco-cms/backoffice/store';
import type { UmbApi } from '@umbraco-cms/backoffice/extension-api';
Expand All @@ -21,10 +19,6 @@

#detailStore?: UmbDetailStore<DetailModelType>;
protected detailDataSource: UmbDetailDataSourceType;
#notificationContext?: UmbNotificationContext;
#createSuccessNotification?: UmbNotificationHandler;
#updateSuccessNotification?: UmbNotificationHandler;
#deleteSuccessNotification?: UmbNotificationHandler;

constructor(
host: UmbControllerHost,
Expand All @@ -43,10 +37,6 @@
this.consumeContext(detailStoreContextAlias, (instance) => {
this.#detailStore = instance;
}).asPromise({ preventTimeout: true }),

this.consumeContext(UMB_NOTIFICATION_CONTEXT, (instance) => {
this.#notificationContext = instance;
}).asPromise({ preventTimeout: true }),
]);
}

Expand Down Expand Up @@ -98,10 +88,6 @@

if (createdData) {
this.#detailStore?.append(createdData);
this.#createSuccessNotification?.close();
// TODO: how do we handle generic notifications? Is this the correct place to do it?
const notification = { data: { message: `Created` } };
this.#createSuccessNotification = this.#notificationContext!.peek('positive', notification);
}

return { data: createdData, error };
Expand All @@ -122,11 +108,6 @@

if (updatedData) {
this.#detailStore?.updateItem(model.unique, updatedData);

// TODO: how do we handle generic notifications? Is this the correct place to do it?
this.#updateSuccessNotification?.close();
const notification = { data: { message: `Saved` } };
this.#updateSuccessNotification = this.#notificationContext!.peek('positive', notification);
}

return { data: updatedData, error };
Expand All @@ -146,11 +127,6 @@

if (!error) {
this.#detailStore?.removeItem(unique);

this.#deleteSuccessNotification?.close();
// TODO: how do we handle generic notifications? Is this the correct place to do it?
const notification = { data: { message: `Deleted` } };
this.#deleteSuccessNotification = this.#notificationContext!.peek('positive', notification);
}

return { error };
Expand Down
9 changes: 4 additions & 5 deletions tests/Umbraco.Tests.AcceptanceTest/package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion tests/Umbraco.Tests.AcceptanceTest/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@
},
"dependencies": {
"@umbraco/json-models-builders": "^2.0.31",
"@umbraco/playwright-testhelpers": "^16.0.3",
"@umbraco/playwright-testhelpers": "^16.0.5",
"camelize": "^1.0.0",
"dotenv": "^16.3.1",
"node-fetch": "^2.6.7"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,8 @@ test('can not publish a block grid with a mandatory radiobox without a value', a
await umbracoUi.content.clickSaveAndPublishButton();

// Assert
await umbracoUi.content.doesSuccessNotificationHaveText(NotificationConstantHelper.success.saved);
//await umbracoUi.content.doesSuccessNotificationHaveText(NotificationConstantHelper.success.saved);
await umbracoUi.content.isErrorNotificationVisible(false);
await umbracoUi.content.doesSuccessNotificationHaveText(NotificationConstantHelper.success.published);
});

Expand Down Expand Up @@ -83,7 +84,8 @@ test('can not publish a block grid with a mandatory checkbox list without a valu
await umbracoUi.content.clickSaveAndPublishButton();

// Assert
await umbracoUi.content.doesSuccessNotificationHaveText(NotificationConstantHelper.success.saved);
//await umbracoUi.content.doesSuccessNotificationHaveText(NotificationConstantHelper.success.saved);
await umbracoUi.content.isErrorNotificationVisible(false);
await umbracoUi.content.doesSuccessNotificationHaveText(NotificationConstantHelper.success.published);
});

Expand Down Expand Up @@ -112,6 +114,7 @@ test('can not publish a block grid with a mandatory dropdown without a value', a
await umbracoUi.content.clickSaveAndPublishButton();

// Assert
await umbracoUi.content.doesSuccessNotificationHaveText(NotificationConstantHelper.success.saved);
//await umbracoUi.content.doesSuccessNotificationHaveText(NotificationConstantHelper.success.saved);
await umbracoUi.content.isErrorNotificationVisible(false);
await umbracoUi.content.doesSuccessNotificationHaveText(NotificationConstantHelper.success.published);
});
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import {ConstantHelper, NotificationConstantHelper, test} from '@umbraco/playwright-testhelpers';

Check notice on line 1 in tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/BlockGrid/ContentWithBlockGrid.spec.ts

View check run for this annotation

CodeScene Delta Analysis / CodeScene Cloud Delta Analysis (v16/dev)

✅ Getting better: Code Duplication

reduced similar code in: 'cannot add number of block element greater than the maximum amount'. Avoid duplicated, aka copy-pasted, code inside the module. More duplication lowers the code health.
import {expect} from "@playwright/test";

const contentName = 'TestContent';
Expand Down Expand Up @@ -39,7 +39,8 @@
await umbracoUi.content.clickSaveButton();

// Assert
await umbracoUi.content.doesSuccessNotificationHaveText(NotificationConstantHelper.success.created);
//await umbracoUi.content.doesSuccessNotificationHaveText(NotificationConstantHelper.success.created);
await umbracoUi.content.isErrorNotificationVisible(false);
expect(await umbracoApi.document.doesNameExist(contentName)).toBeTruthy();
const contentData = await umbracoApi.document.getByName(contentName);
expect(contentData.variants[0].state).toBe(expectedState);
Expand All @@ -62,7 +63,8 @@
await umbracoUi.content.clickSaveAndPublishButton();

// Assert
await umbracoUi.content.doesSuccessNotificationsHaveCount(2);
//await umbracoUi.content.doesSuccessNotificationsHaveCount(2);
await umbracoUi.content.isErrorNotificationVisible(false);
expect(await umbracoApi.document.doesNameExist(contentName)).toBeTruthy();
const contentData = await umbracoApi.document.getByName(contentName);
expect(contentData.variants[0].state).toBe(expectedState);
Expand All @@ -87,7 +89,8 @@
await umbracoUi.content.clickSaveButton();

// Assert
await umbracoUi.content.doesSuccessNotificationHaveText(NotificationConstantHelper.success.saved);
//await umbracoUi.content.doesSuccessNotificationHaveText(NotificationConstantHelper.success.saved);
await umbracoUi.content.isErrorNotificationVisible(false);
expect(await umbracoApi.document.doesNameExist(contentName)).toBeTruthy();
const contentData = await umbracoApi.document.getByName(contentName);
expect(contentData.values[0].value.contentData[0].values[0].value).toEqual(inputText);
Expand All @@ -109,7 +112,8 @@
await umbracoUi.content.clickSaveButton();

// Assert
await umbracoUi.content.doesSuccessNotificationHaveText(NotificationConstantHelper.success.saved);
//await umbracoUi.content.doesSuccessNotificationHaveText(NotificationConstantHelper.success.saved);
await umbracoUi.content.isErrorNotificationVisible(false);
const contentData = await umbracoApi.document.getByName(contentName);
expect(contentData.values[0].value.contentData[0].values[0].value).toEqual(updatedText);
});
Expand All @@ -126,7 +130,8 @@
await umbracoUi.content.clickSaveButton();

// Assert
await umbracoUi.content.doesSuccessNotificationHaveText(NotificationConstantHelper.success.saved);
//await umbracoUi.content.doesSuccessNotificationHaveText(NotificationConstantHelper.success.saved);
await umbracoUi.content.isErrorNotificationVisible(false);
const contentData = await umbracoApi.document.getByName(contentName);
const blockGridValue = contentData.values.find(item => item.value);
expect(blockGridValue).toBeFalsy();
Expand Down Expand Up @@ -200,7 +205,8 @@
await umbracoUi.content.clickSaveButton();

// Assert
await umbracoUi.content.doesSuccessNotificationHaveText(NotificationConstantHelper.success.saved);
//await umbracoUi.content.doesSuccessNotificationHaveText(NotificationConstantHelper.success.saved);
await umbracoUi.content.isErrorNotificationVisible(false);
await umbracoUi.content.doesBlockElementHaveName(blockLabel);
});

Expand All @@ -221,7 +227,8 @@
await umbracoUi.content.clickSaveButton();

// Assert
await umbracoUi.content.doesSuccessNotificationHaveText(NotificationConstantHelper.success.saved);
//await umbracoUi.content.doesSuccessNotificationHaveText(NotificationConstantHelper.success.saved);
await umbracoUi.content.isErrorNotificationVisible(false);
const contentData = await umbracoApi.document.getByName(contentName);
const layoutValue = contentData.values[0]?.value.layout["Umbraco.BlockGrid"];
expect(layoutValue[0].columnSpan).toBe(gridColumns);
Expand Down Expand Up @@ -253,7 +260,8 @@
await umbracoUi.content.clickSaveButton();

// Assert
await umbracoUi.content.doesSuccessNotificationHaveText(NotificationConstantHelper.success.saved);
//await umbracoUi.content.doesSuccessNotificationHaveText(NotificationConstantHelper.success.saved);
await umbracoUi.content.isErrorNotificationVisible(false);
const contentData = await umbracoApi.document.getByName(contentName);
expect(contentData.values[0].value.contentData[0].values[0].value).toEqual(contentBlockInputText);
expect(contentData.values[0].value.settingsData[0].values[0].value).toEqual(settingBlockInputText);
Expand Down Expand Up @@ -281,7 +289,8 @@
await umbracoUi.content.clickSaveButton();

// Assert
await umbracoUi.content.doesSuccessNotificationHaveText(NotificationConstantHelper.success.created);
//await umbracoUi.content.doesSuccessNotificationHaveText(NotificationConstantHelper.success.created);
await umbracoUi.content.isErrorNotificationVisible(false);
expect(await umbracoApi.document.doesNameExist(contentName)).toBeTruthy();
});

Expand All @@ -303,7 +312,8 @@
await umbracoUi.content.clickSaveAndPublishButton();

// Assert
await umbracoUi.content.doesSuccessNotificationHaveText(NotificationConstantHelper.success.saved);
//await umbracoUi.content.doesSuccessNotificationHaveText(NotificationConstantHelper.success.saved);
await umbracoUi.content.isErrorNotificationVisible(false);
await umbracoUi.content.doesSuccessNotificationHaveText(NotificationConstantHelper.success.published);
expect(await umbracoApi.document.doesNameExist(contentName)).toBeTruthy();
const contentData = await umbracoApi.document.getByName(contentName);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,8 @@ test('invariant document type with invariant block grid with invariant block wit
await umbracoUi.content.clickSaveAndPublishButton();

// Assert
await umbracoUi.content.doesSuccessNotificationHaveText(NotificationConstantHelper.success.saved);
//await umbracoUi.content.doesSuccessNotificationHaveText(NotificationConstantHelper.success.saved);
await umbracoUi.content.isErrorNotificationVisible(false);
await umbracoUi.content.doesSuccessNotificationHaveText(NotificationConstantHelper.success.published);

await umbracoUi.reloadPage();
Expand All @@ -78,7 +79,8 @@ test('can not create unsupported invariant document type with invariant block gr
await umbracoUi.content.clickSaveAndPublishButton();

// Assert
await umbracoUi.content.doesSuccessNotificationHaveText(NotificationConstantHelper.success.saved);
//await umbracoUi.content.doesSuccessNotificationHaveText(NotificationConstantHelper.success.saved);
await umbracoUi.content.isErrorNotificationVisible(false);
await umbracoUi.content.doesErrorNotificationHaveText(NotificationConstantHelper.error.documentCouldNotBePublished);
});

Expand All @@ -97,7 +99,8 @@ test('can not create unsupported invariant document type with invariant block gr
await umbracoUi.content.clickSaveAndPublishButton();

// Assert
await umbracoUi.content.doesSuccessNotificationHaveText(NotificationConstantHelper.success.saved);
//await umbracoUi.content.doesSuccessNotificationHaveText(NotificationConstantHelper.success.saved);
await umbracoUi.content.isErrorNotificationVisible(false);
await umbracoUi.content.doesErrorNotificationHaveText(NotificationConstantHelper.error.documentCouldNotBePublished);
});

Expand All @@ -120,7 +123,8 @@ test('variant document type with variant block grid with variant block with an v
await umbracoUi.content.clickContainerSaveAndPublishButton();

// Assert
await umbracoUi.content.doesSuccessNotificationHaveText(NotificationConstantHelper.success.saved);
//await umbracoUi.content.doesSuccessNotificationHaveText(NotificationConstantHelper.success.saved);
await umbracoUi.content.isErrorNotificationVisible(false);
await umbracoUi.content.doesSuccessNotificationHaveText(NotificationConstantHelper.success.published);

await umbracoUi.reloadPage();
Expand All @@ -147,7 +151,8 @@ test('variant document type with invariant block grid with variant block with an
await umbracoUi.content.clickContainerSaveAndPublishButton();

// Assert
await umbracoUi.content.doesSuccessNotificationHaveText(NotificationConstantHelper.success.saved);
//await umbracoUi.content.doesSuccessNotificationHaveText(NotificationConstantHelper.success.saved);
await umbracoUi.content.isErrorNotificationVisible(false);
await umbracoUi.content.doesSuccessNotificationHaveText(NotificationConstantHelper.success.published);

await umbracoUi.reloadPage();
Expand All @@ -174,7 +179,8 @@ test('variant document type with invariant block grid with variant block with an
await umbracoUi.content.clickContainerSaveAndPublishButton();

// Assert
await umbracoUi.content.doesSuccessNotificationHaveText(NotificationConstantHelper.success.saved);
//await umbracoUi.content.doesSuccessNotificationHaveText(NotificationConstantHelper.success.saved);
await umbracoUi.content.isErrorNotificationVisible(false);
await umbracoUi.content.doesSuccessNotificationHaveText(NotificationConstantHelper.success.published);

await umbracoUi.reloadPage();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,8 @@ test('can not publish a block list with a mandatory radiobox without a value', a
await umbracoUi.content.clickSaveAndPublishButton();

// Assert
await umbracoUi.content.doesSuccessNotificationHaveText(NotificationConstantHelper.success.saved);
//await umbracoUi.content.doesSuccessNotificationHaveText(NotificationConstantHelper.success.saved);
await umbracoUi.content.isErrorNotificationVisible(false);
await umbracoUi.content.doesSuccessNotificationHaveText(NotificationConstantHelper.success.published);
});

Expand Down Expand Up @@ -83,7 +84,8 @@ test('can not publish a block list with a mandatory checkbox list without a valu
await umbracoUi.content.clickSaveAndPublishButton();

// Assert
await umbracoUi.content.doesSuccessNotificationHaveText(NotificationConstantHelper.success.saved);
//await umbracoUi.content.doesSuccessNotificationHaveText(NotificationConstantHelper.success.saved);
await umbracoUi.content.isErrorNotificationVisible(false);
await umbracoUi.content.doesSuccessNotificationHaveText(NotificationConstantHelper.success.published);
});

Expand Down Expand Up @@ -112,6 +114,7 @@ test('can not publish a block list with a mandatory dropdown without a value', a
await umbracoUi.content.clickSaveAndPublishButton();

// Assert
await umbracoUi.content.doesSuccessNotificationHaveText(NotificationConstantHelper.success.saved);
//await umbracoUi.content.doesSuccessNotificationHaveText(NotificationConstantHelper.success.saved);
await umbracoUi.content.isErrorNotificationVisible(false);
await umbracoUi.content.doesSuccessNotificationHaveText(NotificationConstantHelper.success.published);
});
Loading
Loading