You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@nifi.apache.org by "mcgilman (via GitHub)" <gi...@apache.org> on 2026/05/20 17:43:00 UTC
[PR] NIFI-15959: Rendering a banner when a previously selected value in a … [nifi]
mcgilman opened a new pull request, #11270:
URL: https://github.com/apache/nifi/pull/11270
…STRING_LIST property is no longer available. STRING_LIST is handled specifically because the UI automatically deselects it unlike single selection.
## Summary
When a connector configuration step loads allowable values for a **STRING_LIST** multi-select, saved selections that are no longer in the catalog are automatically removed from the form control. The configuration step shows a dismissible **caution** banner listing which property(ies) lost values and what was stripped. Single-select properties are unchanged: stale values remain visible as disabled “(no longer available)” options so the user can pick a replacement.
Also introduces reusable **`StatusBanner`** and **`Banner`** components and migrates **`WizardContextBanner`** from legacy `ErrorBanner` to `Banner` → `StatusBanner`, so `variant` (e.g. `critical`) is honored for wizard store errors. Verify-all general errors on the config step still use `ErrorBanner` for now.
## Changes
### STRING_LIST orphan detection (`connector-property-input`)
- Detects values not present in the loaded static or dynamic allowable list.
- For multi-select only: schedules a coalesced strip via `afterNextRender` (`stringListStripScheduled`) and emits `stringListOrphansStripped` once per strip pass.
- New type: `StringListOrphansStrippedEvent` in `connector-property-input.types.ts`.
### Configuration step banner
- Handles `stringListOrphansStripped`, maintains per-property banner entries (replace on re-strip for same property).
- Renders caution `StatusBanner` with intro copy, property labels, removed values (cap 20 + “… and N more”), dismiss, and clear on form re-init.
- Wires `(stringListOrphansStripped)` on each `connector-property-input` in the step template.
### Banner components
- **`StatusBanner`**: themed status shell (FA4 icons, `fa-2x` to match `ErrorBanner`), icon dismiss, content projection + `statusBannerTitle` / `statusBannerDescription` directives.
- **`Banner`**: message list wrapper (single vs list, dedupe) over `StatusBanner`.
- **`WizardContextBanner`**: thin store adapter → `<banner>` (replaces `ErrorBanner`).
### Exports
- `banner`, `status-banner`, directives, and `connector-property-input.types` exported from `libs/shared` `index.ts`.
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: issues-unsubscribe@nifi.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
Re: [PR] NIFI-15959: Rendering a banner when a previously selected value in a … [nifi]
Posted by "rfellows (via GitHub)" <gi...@apache.org>.
rfellows commented on code in PR #11270:
URL: https://github.com/apache/nifi/pull/11270#discussion_r3276308304
##########
nifi-frontend/src/main/frontend/libs/shared/src/components/banner/banner.component.scss:
##########
@@ -0,0 +1,27 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+.banner-container {
+ ul {
+ list-style-type: disc;
+ list-style-position: inside;
+ }
+
+ .error-banner-message {
+ word-break: break-word;
+ }
+}
Review Comment:
these can all be just tailwind styles in the template.
##########
nifi-frontend/src/main/frontend/libs/shared/src/components/status-banner/status-banner.component.ts:
##########
@@ -0,0 +1,54 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import { NgClass } from '@angular/common';
+import { Component, EventEmitter, Input, Output } from '@angular/core';
+import { MatIconButton } from '@angular/material/button';
+import { StatusVariant } from '../../types';
+
+@Component({
+ selector: 'status-banner',
+ standalone: true,
+ imports: [MatIconButton, NgClass],
+ templateUrl: './status-banner.component.html',
+ styleUrl: './status-banner.component.scss'
+})
+export class StatusBanner {
+ @Input() variant: StatusVariant = 'critical';
+ @Input() allowDismiss = true;
+
+ @Output() dismiss: EventEmitter<void> = new EventEmitter<void>();
+
+ getBannerIcon(variant: StatusVariant): string {
+ switch (variant) {
+ case 'success':
+ return 'fa-check-circle';
+ case 'active':
Review Comment:
The shared `.status-variant` theme only defines `neutral`, `critical`, `caution`, `success`, and `info` in `nifi-frontend/src/main/frontend/libs/shared/src/assets/themes/material.scss:366` and `:883`. That means a future `status-banner` caller using `active` would get the icon choice but not the matching container styling.
I think we can get rid of this `case`
```suggestion
```
##########
nifi-frontend/src/main/frontend/libs/shared/src/components/status-banner/status-banner.component.html:
##########
@@ -0,0 +1,37 @@
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<div class="status-banner-container status-variant p-4 flex gap-x-2 text-sm rounded-lg" [class]="variant">
Review Comment:
I'm concerned that we now have 2 competing flavors of warning/caution banners. one is the `overlapping-connections-banner` used on the canvas:
<img width="998" height="111" alt="Image" src="https://github.com/user-attachments/assets/1c35536b-8c17-49d1-8be9-17489483c203" />
and now this one that looks much more re-usable but also not as clean to look at.
<img width="474" height="194" alt="Image" src="https://github.com/user-attachments/assets/6a6d81d6-e45a-4357-9486-4e49f7416e7e" />
I think we should leverage the new component, but consider updating the look of it to be more pleasing to the eye.
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: issues-unsubscribe@nifi.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
Re: [PR] NIFI-15959: Rendering a banner when a previously selected value in a … [nifi]
Posted by "rfellows (via GitHub)" <gi...@apache.org>.
rfellows commented on PR #11270:
URL: https://github.com/apache/nifi/pull/11270#issuecomment-4501394756
reviewing...
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: issues-unsubscribe@nifi.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
Re: [PR] NIFI-15959: Rendering a banner when a previously selected value in a … [nifi]
Posted by "mcgilman (via GitHub)" <gi...@apache.org>.
mcgilman commented on code in PR #11270:
URL: https://github.com/apache/nifi/pull/11270#discussion_r3283388302
##########
nifi-frontend/src/main/frontend/libs/shared/src/components/status-banner/status-banner.component.html:
##########
@@ -0,0 +1,37 @@
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<div class="status-banner-container status-variant p-4 flex gap-x-2 text-sm rounded-lg" [class]="variant">
Review Comment:
I agree with these comment. I've filed the following JIRAs to address them in a follow on effort.
- https://issues.apache.org/jira/browse/NIFI-15964
- https://issues.apache.org/jira/browse/NIFI-15962
##########
nifi-frontend/src/main/frontend/libs/shared/src/components/status-banner/status-banner.component.html:
##########
@@ -0,0 +1,37 @@
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<div class="status-banner-container status-variant p-4 flex gap-x-2 text-sm rounded-lg" [class]="variant">
Review Comment:
I agree with these comments. I've filed the following JIRAs to address them in a follow on effort.
- https://issues.apache.org/jira/browse/NIFI-15964
- https://issues.apache.org/jira/browse/NIFI-15962
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: issues-unsubscribe@nifi.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
Re: [PR] NIFI-15959: Rendering a banner when a previously selected value in a … [nifi]
Posted by "scottyaslan (via GitHub)" <gi...@apache.org>.
scottyaslan merged PR #11270:
URL: https://github.com/apache/nifi/pull/11270
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: issues-unsubscribe@nifi.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
Re: [PR] NIFI-15959: Rendering a banner when a previously selected value in a … [nifi]
Posted by "scottyaslan (via GitHub)" <gi...@apache.org>.
scottyaslan commented on code in PR #11270:
URL: https://github.com/apache/nifi/pull/11270#discussion_r3283344067
##########
nifi-frontend/src/main/frontend/libs/shared/src/components/status-banner/status-banner.component.scss:
##########
@@ -0,0 +1,58 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+.status-banner-container {
+ .status-banner-text-container {
+ max-height: 560px;
+ overflow: auto;
+ }
+
+ // Inherit variant foreground from .status-variant (e.g. caution contrast on amber)
+ button.mat-mdc-icon-button {
+ color: inherit;
+
+ .fa {
+ color: inherit;
+ }
+ }
+
+ .fa {
+ &.neutral {
+ color: var(--mat-sys-on-surface);
+ }
+
+ &.critical {
+ color: var(--mat-sys-on-error);
+ }
+
+ &.caution {
+ color: var(--nf-caution-contrast);
+ }
+
+ &.success {
+ color: var(--nf-success-contrast);
+ }
+
+ &.info {
+ color: var(--nf-success-contrast);
+ }
+
+ &.active {
+ color: var(--nf-success-contrast);
+ }
+ }
Review Comment:
These belong with the other .status-variant class rules in the material.scss file.
```suggestion
```
##########
nifi-frontend/src/main/frontend/libs/shared/src/components/status-banner/status-banner.component.scss:
##########
@@ -0,0 +1,58 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+.status-banner-container {
+ .status-banner-text-container {
+ max-height: 560px;
+ overflow: auto;
+ }
+
+ // Inherit variant foreground from .status-variant (e.g. caution contrast on amber)
+ button.mat-mdc-icon-button {
+ color: inherit;
+
+ .fa {
+ color: inherit;
+ }
+ }
Review Comment:
mat-icon-button should already inherit its rules from the design system
```suggestion
```
##########
nifi-frontend/src/main/frontend/libs/shared/src/components/status-banner/status-banner.component.ts:
##########
@@ -0,0 +1,54 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import { NgClass } from '@angular/common';
+import { Component, EventEmitter, Input, Output } from '@angular/core';
+import { MatIconButton } from '@angular/material/button';
+import { StatusVariant } from '../../types';
+
+@Component({
+ selector: 'status-banner',
+ standalone: true,
+ imports: [MatIconButton, NgClass],
+ templateUrl: './status-banner.component.html',
+ styleUrl: './status-banner.component.scss'
+})
+export class StatusBanner {
+ @Input() variant: StatusVariant = 'critical';
+ @Input() allowDismiss = true;
+
+ @Output() dismiss: EventEmitter<void> = new EventEmitter<void>();
+
+ getBannerIcon(variant: StatusVariant): string {
+ switch (variant) {
+ case 'success':
+ return 'fa-check-circle';
+ case 'active':
+ case 'info':
+ case 'neutral':
+ return 'fa-info-circle';
+ case 'critical':
+ case 'caution':
+ default:
+ return 'fa-exclamation-triangle';
Review Comment:
```suggestion
return 'fa-warning';
```
##########
nifi-frontend/src/main/frontend/libs/shared/src/components/status-banner/status-banner.component.ts:
##########
@@ -0,0 +1,54 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import { NgClass } from '@angular/common';
+import { Component, EventEmitter, Input, Output } from '@angular/core';
+import { MatIconButton } from '@angular/material/button';
+import { StatusVariant } from '../../types';
+
+@Component({
+ selector: 'status-banner',
+ standalone: true,
+ imports: [MatIconButton, NgClass],
+ templateUrl: './status-banner.component.html',
+ styleUrl: './status-banner.component.scss'
+})
+export class StatusBanner {
+ @Input() variant: StatusVariant = 'critical';
+ @Input() allowDismiss = true;
+
+ @Output() dismiss: EventEmitter<void> = new EventEmitter<void>();
+
+ getBannerIcon(variant: StatusVariant): string {
+ switch (variant) {
+ case 'success':
+ return 'fa-check-circle';
Review Comment:
```suggestion
return 'fa-check-circle-o';
```
##########
nifi-frontend/src/main/frontend/libs/shared/src/components/status-banner/status-banner.component.ts:
##########
@@ -0,0 +1,54 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import { NgClass } from '@angular/common';
+import { Component, EventEmitter, Input, Output } from '@angular/core';
+import { MatIconButton } from '@angular/material/button';
+import { StatusVariant } from '../../types';
+
+@Component({
+ selector: 'status-banner',
+ standalone: true,
Review Comment:
Nit: not needed as all components are standalone by default.
```suggestion
```
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: issues-unsubscribe@nifi.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org