From 922712fcf69999d99d2259e16862892f932563a1 Mon Sep 17 00:00:00 2001 From: wjhendry Date: Fri, 31 Jan 2025 17:50:07 +0000 Subject: [PATCH 1/3] PTL-1788: first commit --- .../013_toast-notifications/index.mdx | 80 +++++++++++-------- 1 file changed, 47 insertions(+), 33 deletions(-) diff --git a/docs/001_develop/03_client-capabilities/013_toast-notifications/index.mdx b/docs/001_develop/03_client-capabilities/013_toast-notifications/index.mdx index 9ae8e571e..513c72fa1 100644 --- a/docs/001_develop/03_client-capabilities/013_toast-notifications/index.mdx +++ b/docs/001_develop/03_client-capabilities/013_toast-notifications/index.mdx @@ -19,7 +19,7 @@ import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import EventWrapper from '../../../_includes/_store_event_wrapper.mdx' -# Genesis foundation notifications +## Genesis foundation notifications The `foundation-notifications` package is used for creating and displaying various types of notification, including `alert`, `toast`, `banner`, `snackbar` and `dialog`. These notifications are configurable and can be used in different scenarios, ranging from status update to interactive user alerts. @@ -136,23 +136,26 @@ export class AppComponent { -## Notification Components +## Notification components Here is a list of available notification components in Genesis's `foundation-notifications` package: + * **Alert**: `Alerts` are quick messages that share important information without interrupting the user. -* **Toast**: These are short, auto-closing notifications that are displayed at edge of screen and are ideal for transient messages like success confirmations or error notifications. -* **Banner**: `banner` is used to show important notifications such as messages for system update. It appears on `top` of screen. -* **Snackbar**: These are interactive notifications that appear at bottom of screen. `snackbar` are persistent until dismissed. -* **Dialog**: `dialog` is used for displaying critical notifications as they block the underlying interface until dismissed by user action. One example will be confirmation dialog shown on deleting a user. +* **Toast**: These are short, auto-closing notifications that are displayed at the edge of screen and are ideal for transient messages, such as success confirmations or error notifications. +* **Banner**: `banner` is used to show important notifications, such as messages for system updates. It appears at the `top` of screen. +* **Snackbar**: These are interactive notifications that appear at the bottom of the screen. Each `snackbar` persists until dismissed. +* **Dialog**: `dialog` is used for displaying critical notifications; a dialog blocks the underlying interface until it has been dismissed by user action. You could use this to display a confirmation dialog when deleting a user. -## Understanding notification components with examples: -The notifications component implemented by `foundation-notifications` package are designed to serve specific use cases. These components aids users in providing timely feedback, warning or interactive prompts. +## Notification examples +The notifications components implemented by the `foundation-notifications` package are designed to serve specific use cases. These components aid users by providing timely feedback, warning or interactive prompts. ### Alert -`alerts` are simple, non-intrusive notifications that are used for giving information to user without interrupting their workflow. They are great for showing messages that don't require user interaction such as updates, confirmations or warnings. It functions similarly to the built-in JavaScript **alert()** method +`alerts` are simple, non-intrusive notifications that are used for giving information to the user without interrupting their workflow. Alerts are great for showing messages that don't require user interaction, such as updates, confirmations or warnings. An alert functions similarly to the built-in JavaScript **alert()** method. + +Here's an example of using `alerts` with the [showNotificationAlert](./docs/api/foundation-notifications.shownotificationalert) method from the package. You can click on the `Show Alert` button to view the alert message. -Here's an example of using `alerts` with the [showNotificationAlert](./docs/api/foundation-notifications.shownotificationalert) method from the package.For the parameters, refer to [AlertStructure](./docs/api/foundation-notifications.alertstructure) in the package API documentation. +For the parameters, refer to [AlertStructure](./docs/api/foundation-notifications.alertstructure) in the package API documentation.
@@ -163,9 +166,11 @@ Here's an example of using `alerts` with the [showNotificationAlert](./docs/api/ ``` ### Toast -`Toast` notifications are short, auto-closing notifications that are displayed at edge of the screen. They are used for transient messages like success confirmations, error notifications or updates that don't require user acknowledgement. +`Toast` notifications are short, auto-closing notifications that are displayed at the edge of the screen. They are used for transient messages, such as success confirmations, error notifications or updates that don't require user acknowledgement. + +Here's an example of using `toast` with the [showNotificationToast](./docs/api/foundation-notifications.shownotificationtoast) method from the package. You can click on the `Show Toast` button to view the toast message slide in from the top right. You can click to remove it, or you can leave it and it will disappear after a fw seconds. -Here's an example of using `toast` with the [showNotificationToast](./docs/api/foundation-notifications.shownotificationtoast) method from the package.For the parameters, refer to [ToastStructure](./docs/api/foundation-notifications.toaststructure) in the package API documentation. +For the parameters, refer to [ToastStructure](./docs/api/foundation-notifications.toaststructure) in the package API documentation.
@@ -183,11 +188,14 @@ Here's an example of using `toast` with the [showNotificationToast](./docs/api/f 'rapid', ); ``` -As mentioned before, they automatically close after a specific duration by using `autoClose` and `closeTimeout` options. Like `snackbar`, they can be styled using the `type` option that supports `error, success, warning and info` styles. +As mentioned before, toast notifications automatically close after a specific duration, using the `autoClose` and `closeTimeout` options. Like [`snackbar`](#snackbar), they can be styled using the `type` option that supports `error, success, warning and info` styles. ### Banner -`Banner` notifications are used for delivering key messages and appears at `top` of the screen. It supports `confirming` and `dismissing` actions with callbacks. -Here's an example of using `banner` with the [showNotificationBanner](./docs/api/foundation-notifications.shownotificationbanner) method from the package. For the parameters, refer to [BannerStructure](./docs/api/foundation-notifications.bannerstructure) in the package API documentation. +`Banner` notifications are used for delivering key messages. They appear at the `top` of the screen. `Banner` supports `confirming` and `dismissing` actions with callbacks. + +Here is an example of using `banner` with the [showNotificationBanner](./docs/api/foundation-notifications.shownotificationbanner) method from the package. You can click on the `Show Banner` button to view the banner message. This scrolls to the top of the page before displaying the banner, which you can remove using either the `Confirm` or `Dismiss` link. (Then you'll have to scroll back here.) + +For the parameters, refer to [BannerStructure](./docs/api/foundation-notifications.bannerstructure) in the package API documentation.
@@ -208,11 +216,18 @@ Here's an example of using `banner` with the [showNotificationBanner](./docs/api ``` ### Snackbar - `snackbars` are notifications that appear at bottom of screen. These notifications can have interactive button unlike `toasts`. They can be used for brief updates that require user interaction, like showing a status or confirming an action. + `snackbar` is a notification that appears at the bottom of the screen. These notifications can have interactive buttons, unlike `toasts`. They can be used for brief updates that require user interaction, such as showing a status message or confirming an action. + + You can use the `type` property in snackbar config to set the notification style. Supported types are: + + - `error` + - `success` + - `info` + - `warning` - `type` property in snackbar config can be used to set the notification style. Supported types are `error`,`success`, `info` or `warning`. +Here is an example of using `snackbar` with the [showNotificationSnackbar](./docs/api/foundation-notifications.shownotificationsnackbar) method from the package. You can click on the `Show Snackbar` button to view the snackbar at the bottom left of the screen. You can click on the `Confirm` link to remove it. -Here's an example of using `snackbar` with the [showNotificationSnackbar](./docs/api/foundation-notifications.shownotificationsnackbar) method from the package.For the parameters, refer to [SnackbarStructure](./docs/api/foundation-notifications.snackbarstructure) in the package API documentation. +For the parameters, refer to [SnackbarStructure](./docs/api/foundation-notifications.snackbarstructure) in the package API documentation.
@@ -229,7 +244,7 @@ Here's an example of using `snackbar` with the [showNotificationSnackbar](./docs 'rapid', ); ``` - `Snackbar` are persistent until dismissed. They can disappear automatically after a short time by setting the `autoClose` property in the snackbar config. + `snackbar` is persistent until dismissed. If you want a `snackbar` to disappear automatically after a short time, set the `autoClose` property in the snackbar config. ```typescript showNotificationSnackbar( @@ -247,12 +262,11 @@ Here's an example of using `snackbar` with the [showNotificationSnackbar](./docs ### Dialog -This notification component uses a modal-like window to display notification. `Dialog` notifications requires user to take an action before proceeding as they block the underlying interface until dismissed. Therefore, these are used for critical interactions such as warnings, confirmations or important announcements. `Dialog` notification component also supports multiple action buttons. +The `dialog` notification component uses a modal-like window to display notification. `Dialog` notifications require there user to take an action before proceeding; they block the underlying interface until dismissed. Therefore, these are used for critical interactions such as warnings, confirmations or important announcements. This component also supports multiple action buttons. -One of the most common use case for dialog is `confirming before deleting`. +One of the most common use cases for dialog is `confirming before deleting`. -An example for using `dialog` component is shown in the Example section above. -Multiple action buttons can be shown in a dialog by using `confirmingActions` property as shown in below snippet: +Multiple action buttons can be shown in a dialog. For this, use the `confirmingActions` property, as shown in the example below: ```typescript showNotificationDialog( @@ -275,16 +289,16 @@ showNotificationDialog( ``` -## Notification listener Component +## Notification listener component -`rapid-notification-listener` component is a key utility in Genesis that listens for notifications event dispatched form any part of your application. It processes the event payload and dynamically displays the appropriate notification component (e.g., `Alert`, `Toast`, `Dialog`, etc.). +The `rapid-notification-listener` component is a key utility in Genesis that listens for notifications events dispatched from any part of your application. It processes the event payload and dynamically displays the appropriate notification component (e.g., `alert`, `toast`, `dialog`, etc.). By centralizing notification management, the `notification-listener` makes it easy to handle different types of notification in a consistent and modular way. -The client app need to create `notification-listener` at top of the component tree. Any child under `notification-listener` component can dispatch custom **NotificationEvent** event +The client app must create a `notification-listener` at top of the component tree. Any child under `notification-listener` component can dispatch custom **NotificationEvent** event. -### Example: Usage of Notification listener -Lets look at code example to setup and use the `notification-listener` component. You will need to follow the following steps to achieve this: +### Using the Notification listener +Let's look at a code example to set up and use the `notification-listener` component. You need to follow the following steps to achieve this: **1. Wrap your application with the notification-listener** @@ -298,9 +312,9 @@ As discussed earlier `notification-listener` component needs to be placed at the ``` -**2. Dispatching notification using NOTIFICATION_EVENT** +**2. Dispatch the notification using NOTIFICATION_EVENT** -To dispatch notification, you can use [NotificationEvent.NOTIFICATION_EVENT](./docs/api/foundation-notifications.notificationevent.md). You can specify the type of notification component you want to display in the `config` object. For this example we are displaying snackbar. +To dispatch notification, you can use [NotificationEvent.NOTIFICATION_EVENT](./docs/api/foundation-notifications.notificationevent.md). You can specify the type of notification component you want to display in the `config` object. For this example, we are displaying a `snackbar`. ```typescript this.$emit( NotificationEvent.NOTIFICATION_EVENT, @@ -317,12 +331,12 @@ this.$emit( NotificationEvent.NOTIFICATION_EVENT, } as NotificationStructure,) ``` -**3. Provide a UI element to trigger notification** +**3. Provide a UI element to trigger the notification** Now you can trigger your notification on clicking on a UI element like button. +Let's complete the above example and trigger the notification event from a child component. -Lets complete the above example and trigger the notification event from a child component. @@ -426,7 +440,7 @@ export class AppComponent { -Additionally we can also provide `resource-name` attribute to `notification-listener` component. This attribute allows the component to connect to a datasource and listen to the notifications on actions like `insert`, `update` or `delete` performed on the specified `resource-name`. +Additionally, you can provide the `resource-name` attribute to the `notification-listener` component. This attribute allows the component to connect to a datasource and listen to the notifications on actions like `insert`, `update` or `delete` performed on the specified `resource-name`. ## Installation From c1d8e4d2b1c8e446010e1fbdffe4c1bd14b65490 Mon Sep 17 00:00:00 2001 From: wjhendry Date: Sat, 1 Feb 2025 10:18:50 +0000 Subject: [PATCH 2/3] interim commit --- .../50_ote-app/01_getting-started.mdx | 3 +-- static/img/template-projects.png | Bin 0 -> 68229 bytes 2 files changed, 1 insertion(+), 2 deletions(-) create mode 100644 static/img/template-projects.png diff --git a/docs/002_how-to/50_ote-app/01_getting-started.mdx b/docs/002_how-to/50_ote-app/01_getting-started.mdx index 21abcf536..aeea20acc 100644 --- a/docs/002_how-to/50_ote-app/01_getting-started.mdx +++ b/docs/002_how-to/50_ote-app/01_getting-started.mdx @@ -27,8 +27,7 @@ If you haven't received this or don't know your details, contact:

dev.s 3. The OTE app is listed in the lower part of the screen. Click on the `Open in Create` button for the app. -![Launchpad project templates](/img/genesis-launchpad/new-project-from-template.png) - +![Launchpad project templates](/img/template-projects.png) ## Genesis Create diff --git a/static/img/template-projects.png b/static/img/template-projects.png new file mode 100644 index 0000000000000000000000000000000000000000..3f14dace5ed3bf462acecfa355209f93090d5147 GIT binary patch literal 68229 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 Z&%AWU42jeB6LT1Vz|+;wWt~$(69C6;^JxG8 literal 0 HcmV?d00001 From 4f524e57e3ab30352291d829311226a269373bbb Mon Sep 17 00:00:00 2001 From: wjhendry Date: Sun, 2 Feb 2025 10:37:24 +0000 Subject: [PATCH 3/3] PTL-1789: simple edits to Filters page --- .../010_filters/index.mdx | 27 +++++++++---------- 1 file changed, 12 insertions(+), 15 deletions(-) diff --git a/docs/001_develop/03_client-capabilities/010_filters/index.mdx b/docs/001_develop/03_client-capabilities/010_filters/index.mdx index df4ee456a..cbe0ec901 100644 --- a/docs/001_develop/03_client-capabilities/010_filters/index.mdx +++ b/docs/001_develop/03_client-capabilities/010_filters/index.mdx @@ -15,8 +15,6 @@ import FiltersDemo from '../../../../examples/ui/client-capabilities/filters/fil import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; -# Genesis Foundation Filters - [![lerna](https://img.shields.io/badge/maintained%20with-lerna-cc00ff.svg)](https://lerna.js.org/) [![TypeScript](https://img.shields.io/badge/%3C%2F%3E-TypeScript-%230074c1.svg)](https://www.typescriptlang.org/) @@ -24,15 +22,14 @@ import TabItem from '@theme/TabItem'; Client-side filters in Genesis allow users to filter and process data locally within the web application. They may also access runtime data or state to provide an outcome. These filters, including options like `userTargeting` and `timeWindow`, enable customized data manipulation directly in the browser, enhancing responsiveness by reducing server requests. -Client-side filters generally take primitive input parameters, and return `true` or `false` based on these values. They can be combined using the [ClientFilterRunner](./docs/api/foundation-filters.runner.md) utility provided in the `foundation-filters` package to create layered filtering conditions for complex data scenarios. When a filter is used without all the input parameters needed, Genesis logs a warning and returns `true` by convention so that the chain can continue. - -## API Documentation +Client-side filters generally take primitive input parameters, and return `true` or `false` based on these values. You can combine them using the [ClientFilterRunner](./docs/api/foundation-filters.runner.md) utility provided in the `foundation-filters` package to create layered filtering conditions for complex data scenarios. When a filter is used without all the input parameters needed, Genesis logs a warning and returns `true` by convention so that the chain can continue. -For more detailed information on API and configurations, please refer to the [API documentation](./docs/api/index.md) in the `docs/api` directory. +## API documentation +For more detailed information on API and configurations, see the [API documentation](./docs/api/index.md). ## Example -Lets look at an example of one of the many filters in this module, the `timeWindow` filter. Further examples are shown below. +Here is an example of one of the many filters in this module, the `timeWindow` filter. @@ -40,9 +37,9 @@ Lets look at an example of one of the many filters in this module, the `timeWind Each filter is provided in two flavours: 1. Functions -2. Dependency Injection (DI) +2. Dependency injection (DI) -These flavours are explained in detail below with help of code examples +These flavours are explained in detail below with help of code examples. @@ -120,7 +117,7 @@ data or state from the application it needs to provide its outcome. The DI versi ## Available filters -Here is a list of available filters in Genesis's `foundation-filters` package: +Here is a list of available filters in the `foundation-filters` package: * [nodeEnv](./docs/api/foundation-filters.nodeenvfilter.md): This filter is used to match the current environment (production, development etc.) with the environment specified (passed as function param). It is useful for supporting environment-specific conditions ensuring that certain features are only available for targetted environment. * [percentage](./docs/api/foundation-filters.percentagefilter.md): The percentage filter in Genesis foundation filters checks if a randomly generated number between 0 and 100 is within a specified percentage threshold. This allows for setting probabilistic conditions, enabling features or elements to be displayed to a proportion of users based on the given percentage. This filter is useful for scenarios like A/B testing or gradually rolling out new features. @@ -182,7 +179,7 @@ Let's take a closer look at each filter, understanding their usage with the help ### `nodeEnv` The nodeEnv filter in Genesis’s foundation filters checks the current application environment (such as "development," "production," etc.) and returns true if the filter’s specified environment matches the current one. This filter ensures that certain features or configurations are available only in intended environments by managing environment-specific conditions. -Lets look at the usage examples as function and when used with DI: +Look at the usage examples as function and when used with DI: @@ -211,7 +208,7 @@ import { NodeEnv } from '@genesislcap/foundation-filters'; const outcome = this.nodeEnv.isDevelopment; ``` -you can find other available API for nodeEnv in the [API Docs](./docs/api/index.md) +You can find other the available API for nodeEnv in the [API Docs](./docs/api/index.md). ### `percentage` The percentage filter in Genesis foundation filters checks if a randomly generated number between 0 and 100 is within a specified percentage threshold. This allows for setting probabilistic conditions, enabling features or elements to be displayed to a proportion of users based on the given percentage. This filter is useful for scenarios like A/B testing or gradually rolling out new features. @@ -246,7 +243,7 @@ The percentage filter allows you to display certain features or messages to a se ### `timeWindow` This filter is used to check whether the current date and time fall between the specified start and end period.The filter returns true if the current date and time is within the specified range. `timeWindow` filter can be helpful when you want to manipulate data within a specific time frame. -Lets look at the usage examples as function and with DI: +Look at the usage examples as function and with DI: @@ -292,7 +289,7 @@ This filter will return true when the current URL matches on **ANY** of the par This filter helps in targeting specific URLs based on these parameters, which can be extremely useful for restricting or enabling features based on URL parameters or domains. For example, you could use the filter to only allow access to certain content when the URL matches a secure HTTPS connection on specific hosts, like `https://test.genesislab.global`. -Lets look at the usage examples as function and with DI: +Look at the usage examples as function and with DI: ```ts @@ -327,7 +324,7 @@ Lets look at the usage examples as function and with DI: ### `userAgent` The `userAgent` filters content on the basis of user’s browser, device, operating system (OS), or specific user agent string parameters. It allows user to specify which browsers(e.g. Chrome, Firefox), devices (e.g., mobile or desktop), or OS (e.g., IOS, Windows) have access to certain features. You can use this filter for providing tailored experience on the basis of user's environment for instance customizing content for a specic browser or device. -Lets look at the usage examples as function and with DI: +Look at the usage examples as function and with DI: ```ts