Skip to content

Commit

Permalink
feat(platform): introduce variant management component (#9051)
Browse files Browse the repository at this point in the history
* feat(platform): introduce variant management component

* fix(platform): export directive

* fix(platform): fix failing unit test

* fix(platform): add decorator

* fix(platform): pr comments

* fix(platform): address pr comments

* fix(platform): format file

* chore: apply migrations

* fix(platform): simplify code
  • Loading branch information
N1XUS committed Dec 12, 2022
1 parent fa7a76d commit 751c55c
Show file tree
Hide file tree
Showing 128 changed files with 4,483 additions and 115 deletions.
2 changes: 2 additions & 0 deletions angular.json
Original file line number Diff line number Diff line change
Expand Up @@ -274,6 +274,7 @@
"docs-platform-thumbnail": "libs/docs/platform/thumbnail",
"docs-platform-time-picker": "libs/docs/platform/time-picker",
"docs-platform-upload-collection": "libs/docs/platform/upload-collection",
"docs-platform-variant-management": "libs/docs/platform/variant-management",
"docs-platform-vhd": "libs/docs/platform/vhd",
"docs-platform-wizard-generator": "libs/docs/platform/wizard-generator",
"docs-schema": "libs/docs/schema",
Expand Down Expand Up @@ -332,6 +333,7 @@
"platform-thumbnail": "libs/platform/src/lib/thumbnail",
"platform-upload-collection": "libs/platform/src/lib/upload-collection",
"platform-value-help-dialog": "libs/platform/src/lib/value-help-dialog",
"platform-variant-management": "libs/platform/src/lib/variant-management",
"platform-wizard-generator": "libs/platform/src/lib/wizard-generator",
"plugins-wdio": "libs/plugins/wdio",
"workspace-tools": "tools"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,10 @@ export const components: SectionInterfaceContent[] = [
{
url: 'platform/message-popover',
name: 'Message Popover'
},
{
url: 'platform/variant-management',
name: 'Variant Management'
}
];

Expand Down
7 changes: 7 additions & 0 deletions apps/docs/src/app/platform/platform-documentation.routes.ts
Original file line number Diff line number Diff line change
Expand Up @@ -279,6 +279,13 @@ export const ROUTES: Routes = [
path: 'message-popover',
loadChildren: () =>
import('@fundamental-ngx/docs/platform/message-popover').then((m) => m.MessagePopoverDocsModule)
},
{
path: 'variant-management',
loadChildren: () =>
import('@fundamental-ngx/docs/platform/variant-management').then(
(m) => m.VariantManagementDocsModule
)
}
]
}
Expand Down
6 changes: 6 additions & 0 deletions libs/core/src/lib/checkbox/checkbox/checkbox.component.scss
Original file line number Diff line number Diff line change
Expand Up @@ -8,4 +8,10 @@ fd-checkbox {
.fd-checkbox__label {
user-select: none;
}

&.fd-checkbox--standalone {
.fd-checkbox__label {
margin: 0;
}
}
}
5 changes: 5 additions & 0 deletions libs/core/src/lib/checkbox/checkbox/checkbox.component.ts
Original file line number Diff line number Diff line change
Expand Up @@ -134,6 +134,11 @@ export class CheckboxComponent implements ControlValueAccessor, AfterViewInit, O
return this._values;
}

/** Whether checkbox should be rendered standalone (without any text). */
@HostBinding('class.fd-checkbox--standalone')
@Input()
standalone = false;

/** @hidden */
@HostBinding('style.position')
readonly position = 'relative';
Expand Down
1 change: 1 addition & 0 deletions libs/core/src/lib/popover/base/base-popover.class.ts
Original file line number Diff line number Diff line change
Expand Up @@ -149,4 +149,5 @@ export interface TriggerConfig {
trigger: string;
openAction: boolean;
closeAction: boolean;
stopPropagation?: boolean;
}
6 changes: 5 additions & 1 deletion libs/core/src/lib/popover/popover-service/popover.service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -249,10 +249,14 @@ export class PopoverService extends BasePopoverClass {
this.triggers.forEach((trigger) => {
const triggerName = typeof trigger === 'string' ? trigger : trigger.trigger;
this._eventRef.push(
this._renderer.listen(this._triggerElement.nativeElement, triggerName, () => {
this._renderer.listen(this._triggerElement.nativeElement, triggerName, (event: Event) => {
const closeAction = typeof trigger !== 'object' || !!trigger.closeAction;
const openAction = typeof trigger !== 'object' || !!trigger.openAction;
this.toggle(openAction, closeAction);

if (typeof trigger === 'object' && trigger.stopPropagation) {
event.stopImmediatePropagation();
}
})
);
});
Expand Down
2 changes: 0 additions & 2 deletions libs/core/src/lib/table/table.component.ts
Original file line number Diff line number Diff line change
Expand Up @@ -131,8 +131,6 @@ export class TableComponent implements AfterViewInit, OnDestroy, FdTable {
/** @hidden */
_onRowKeydown(event: KeyboardEvent, tableRow: TableRowDirective): void {
if (!event.defaultPrevented && KeyUtil.isKeyCode(event, [DOWN_ARROW, UP_ARROW])) {
event.preventDefault();

const dir = KeyUtil.isKeyCode(event, DOWN_ARROW) ? 1 : -1;
const rows = dir === 1 ? this._rows.toArray() : this._rows.toArray().reverse();
const currentRowIndex = rows.findIndex((row) => row === tableRow);
Expand Down
26 changes: 26 additions & 0 deletions libs/core/src/lib/utils/pipes/filter-strings.pipe.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
import { Pipe, PipeTransform } from '@angular/core';
import { Nullable } from '@fundamental-ngx/core/shared';

@Pipe({
name: 'fdFilterStrings'
})
export class FilterStringsPipe implements PipeTransform {
/**
* Performs filtering.
* @param values Array of items.
* @param params Search parameters.
*/
transform(values: any[] = [], params: { searchTerm: Nullable<string>; key: string }): any[] {
if (!params.searchTerm) {
return values;
}
if (params.key) {
values = values.filter((item) =>
item[params.key].toLocaleLowerCase().includes(params.searchTerm?.toLocaleLowerCase())
);
} else {
values = values.filter((item) => item.toLocaleLowerCase().includes(params.searchTerm?.toLocaleLowerCase()));
}
return values;
}
}
7 changes: 5 additions & 2 deletions libs/core/src/lib/utils/pipes/pipe.module.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import { NgModule } from '@angular/core';

import { DisplayFnPipe } from './displayFn.pipe';
import { FilterStringsPipe } from './filter-strings.pipe';
import { SearchHighlightPipe } from './search-highlight.pipe';
import { TwoDigitsPipe } from './two-digits.pipe';
import { SafePipe } from './safe.pipe';
Expand All @@ -16,7 +17,8 @@ import { TruncatePipe } from './truncate.pipe';
SafePipe,
ValueByPathPipe,
IsCompactDensityPipe,
TruncatePipe
TruncatePipe,
FilterStringsPipe
],
exports: [
DisplayFnPipe,
Expand All @@ -25,7 +27,8 @@ import { TruncatePipe } from './truncate.pipe';
SafePipe,
ValueByPathPipe,
IsCompactDensityPipe,
TruncatePipe
TruncatePipe,
FilterStringsPipe
]
})
export class PipeModule {}
1 change: 1 addition & 0 deletions libs/core/src/lib/utils/public_api.ts
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ export * from './pipes/safe.pipe';
export * from './pipes/is-compact.pipe';
export * from './pipes/value-by-path.pipe';
export * from './pipes/truncate.pipe';
export * from './pipes/filter-strings.pipe';

export * from './drag-and-drop/drag-and-drop.module';
export * from './drag-and-drop/dnd-list/dnd-list.directive';
Expand Down
3 changes: 2 additions & 1 deletion libs/docs/platform/shared/api-files.ts
Original file line number Diff line number Diff line change
Expand Up @@ -115,5 +115,6 @@ export const API_FILES = {
'MessagePopoverFormWrapperComponent',
'MessageViewComponent',
'MessagePopoverFormItemDirective'
]
],
variantManagement: ['VariantManagementComponent', 'VariantManagementWrapperComponent']
};
Original file line number Diff line number Diff line change
Expand Up @@ -77,8 +77,13 @@ export class PlatformSmartFilterBarSliderComponent extends BaseDynamicFormGenera
viewProviders: [dynamicFormFieldProvider, dynamicFormGroupChildProvider, smartFilterBarProvider]
})
export class PlatformSmartFilterBarDateRendererComponent extends BaseSmartFilterBarConditionField {
constructor(dialogService: DialogService, smartFilterBar: SmartFilterBar, injector: Injector) {
super(dialogService, smartFilterBar, injector);
constructor(
dialogService: DialogService,
smartFilterBar: SmartFilterBar,
smartFilterBarService: SmartFilterBarService,
injector: Injector
) {
super(dialogService, smartFilterBar, smartFilterBarService, injector);
}
}

Expand Down
4 changes: 4 additions & 0 deletions libs/docs/platform/variant-management/e2e/tsconfig.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
{
"extends": "../../../../../e2e/tsconfig.json",
"include": ["./**/*.e2e-spec.ts"]
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
describe('VariantManagement test', () => {
// Placeholder for writing helpful e2e tests
});
Original file line number Diff line number Diff line change
@@ -0,0 +1,88 @@
<fdp-variant-management-wrapper>
<fdp-smart-filter-bar [liveUpdate]="true" [subject]="subject">
<fdp-variant-management *fdpSmartFilterBarToolbarItem [variants]="variants" userName="John Doe" #variantManager>
<span *fdpVariantManagementDirtyLabel>changed</span>
</fdp-variant-management>
</fdp-smart-filter-bar>
<br />
<h4 fd-title>Line Items</h4>
<br />
<fdp-table
fdp-smart-filter-bar-subject
#subject="fdp-smart-filter-bar-subject"
[dataSource]="source"
[trackBy]="trackBy"
emptyTableMessage="No data found"
>
<fdp-column
fdp-smart-filter-bar-field-definition
[smartFilterBarFilterable]="false"
name="name"
key="name"
label="Name"
defaultSelected="true"
align="start"
>
</fdp-column>

<fdp-column
fdp-smart-filter-bar-field-definition
name="description"
key="description"
defaultSelected="true"
label="Description"
>
</fdp-column>

<fdp-column
fdp-smart-filter-bar-field-definition
[dataType]="dataTypeEnum.NUMBER"
name="price"
key="price.value"
label="Price"
align="end"
>
</fdp-column>

<fdp-column
fdp-smart-filter-bar-field-definition
[filterType]="filterTypeEnum.MULTI"
name="status"
key="status"
label="Status"
required="true"
align="center"
hasOptions="true"
>
</fdp-column>

<fdp-column
fdp-smart-filter-bar-field-definition
[filterType]="filterTypeEnum.SINGLE"
name="statusColor"
key="statusColor"
label="Status color"
align="center"
hasOptions="true"
>
</fdp-column>

<fdp-column
fdp-smart-filter-bar-field-definition
[dataType]="dataTypeEnum.DATE"
name="date"
key="date"
label="Date"
></fdp-column>

<fdp-column
fdp-smart-filter-bar-field-definition
[filterType]="filterTypeEnum.SINGLE"
[dataType]="dataTypeEnum.BOOLEAN"
name="verified"
key="verified"
label="Verified"
hasOptions="true"
></fdp-column>
</fdp-table>
</fdp-variant-management-wrapper>

0 comments on commit 751c55c

Please sign in to comment.