From 68e791b2e19b52951cc5627deb2b848744210662 Mon Sep 17 00:00:00 2001 From: arpit1503khanna Date: Wed, 14 Feb 2024 18:12:03 +0530 Subject: [PATCH 1/2] fix(core): fix the invalid date issue when no time is selected for date/time column --- .../lib/builder/group/group.component.html | 12 +++++----- .../src/lib/builder/group/group.component.ts | 24 +++++++++++++------ .../classes/nodes/abstract-prompt.class.ts | 11 ++------- .../src/lib/types/base.types.ts | 4 ++-- projects/workflows-element/package.json | 4 ++-- 5 files changed, 29 insertions(+), 26 deletions(-) diff --git a/projects/workflows-creator/src/lib/builder/group/group.component.html b/projects/workflows-creator/src/lib/builder/group/group.component.html index 7b77398..c8db58a 100644 --- a/projects/workflows-creator/src/lib/builder/group/group.component.html +++ b/projects/workflows-creator/src/lib/builder/group/group.component.html @@ -171,7 +171,7 @@ autofocus value="{{ input.setValueName(nodeWithInput.node.state) }}" (focusout)="callback($event.target)" - /> + /> @@ -235,7 +235,7 @@ [closeOnSelect]="false" (blur)=" callback( - getLibraryValue($event, inputType.People, { + getLibraryValue(nodeWithInput.node,$event, inputType.People, { list: list, key: 'value' }) @@ -266,7 +266,7 @@ @@ -292,14 +292,14 @@ class="close-btn" (click)=" callback( - getLibraryValue({target: {value: dateTime}}, inputType.DateTime) + getLibraryValue(nodeWithInput.node,{target: {value: dateTime}}, inputType.DateTime) ) " - [disabled]="!dateTime.date || !dateTime.time" + [disabled]="!dateTime.date" > Set - + diff --git a/projects/workflows-creator/src/lib/builder/group/group.component.ts b/projects/workflows-creator/src/lib/builder/group/group.component.ts index 70eac5d..99f7101 100644 --- a/projects/workflows-creator/src/lib/builder/group/group.component.ts +++ b/projects/workflows-creator/src/lib/builder/group/group.component.ts @@ -22,6 +22,7 @@ import {InvalidEntityError} from '../../errors/base.error'; import { AllowedValues, AllowedValuesMap, + BpmnNode, NodeWithInput, RecordOfAnyType, WorkflowNode, @@ -58,9 +59,9 @@ export class GroupComponent implements OnInit, AfterViewInit { constructor( private readonly nodes: NodeService, private readonly localizationSvc: LocalizationProviderService, - ) {} + ) {} public inputType = InputTypes; - + @Input() group: AbstractBaseGroup; @@ -99,10 +100,11 @@ export class GroupComponent implements OnInit, AfterViewInit { itemChanged = new EventEmitter(); date: DateType = {month: 0, day: 0, year: 0}; - dateTime: DateTime = { - date: {month: 0, day: 0, year: 0}, - time: {hour: null, minute: null}, - }; + + dateTime:any={ + date:"", + time:"" + } emailInput: EmailInput = { subject: '', body: '', @@ -316,6 +318,10 @@ export class GroupComponent implements OnInit, AfterViewInit { groupId: string, id?: string, ) { + this.dateTime={ + date:"", + time:"" + } const newNode = { node: this.nodes.getNodeByName( node.getIdentifier(), @@ -515,7 +521,8 @@ export class GroupComponent implements OnInit, AfterViewInit { this.selectedItems = []; } - getLibraryValue($event: any, type: string, metaObj: RecordOfAnyType) { + + getLibraryValue(node:BpmnNode,$event: any, type: string, metaObj: RecordOfAnyType) { const value = $event.target?.value ?? $event; switch (type) { case InputTypes.People: @@ -536,6 +543,9 @@ export class GroupComponent implements OnInit, AfterViewInit { } case InputTypes.DateTime: if (value) { + if(this.dateTime.time===""){ + this.dateTime.time=node.state.get("defaultTime")??"9:00"; + } const dateObj = moment(`${value.date} ${value.time}`); return { date: { diff --git a/projects/workflows-creator/src/lib/classes/nodes/abstract-prompt.class.ts b/projects/workflows-creator/src/lib/classes/nodes/abstract-prompt.class.ts index d01ee12..015352e 100644 --- a/projects/workflows-creator/src/lib/classes/nodes/abstract-prompt.class.ts +++ b/projects/workflows-creator/src/lib/classes/nodes/abstract-prompt.class.ts @@ -234,15 +234,8 @@ export abstract class WorkflowPrompt { DATE_TIME_FORMAT, ); return { - date: { - month: moment(dateString).month() + 1, - day: moment(dateString).date(), - year: moment(dateString).year(), - }, - time: { - hour: moment(dateString).hours(), - minute: moment(dateString).minutes(), - }, + date: moment(dateString).format("YYYY-MM-DD"), + time: moment(dateString).format("hh:mm"), }; } case InputTypes.Email: diff --git a/projects/workflows-creator/src/lib/types/base.types.ts b/projects/workflows-creator/src/lib/types/base.types.ts index 91916cf..ef5effd 100644 --- a/projects/workflows-creator/src/lib/types/base.types.ts +++ b/projects/workflows-creator/src/lib/types/base.types.ts @@ -139,7 +139,7 @@ export type Select = { * @property day - The day of the month. * @property year - The year of the date. */ -export type DateType = {month: 0; day: 0; year: 0}; +export type DateType = {month: number; day: number; year: number}; /** * `DateTime` is an object with a `date` property of type `DateType` and a `time` property of type @@ -149,7 +149,7 @@ export type DateType = {month: 0; day: 0; year: 0}; */ export type DateTime = { date: DateType; - time: {hour: null; minute: null}; + time: {hour: number; minute: number}; }; /** diff --git a/projects/workflows-element/package.json b/projects/workflows-element/package.json index ae1e2fa..3e669ce 100644 --- a/projects/workflows-element/package.json +++ b/projects/workflows-element/package.json @@ -17,5 +17,5 @@ "access": "public", "directory": "dist" }, - "hash": "7c91307fa0c8a1ecbe458304cc791f4a31ed7b8763112f2eb09bf1a6b5768b58" -} + "hash": "388809af6444a8fc997fa5e1e76c0f7847b34244a3cb68d956706dec8c470733" +} \ No newline at end of file From d31a6f1359eb71ee4df33fa83408dde0b681cbb0 Mon Sep 17 00:00:00 2001 From: arpit1503khanna Date: Thu, 15 Feb 2024 10:29:57 +0530 Subject: [PATCH 2/2] fix(core): enable input field to remain active on mouse selection of the entered text --- .../src/lib/builder/builder.component.ts | 2 +- .../lib/builder/group/group.component.html | 27 ++++++--- .../src/lib/builder/group/group.component.ts | 57 +++++++++++++------ .../classes/nodes/abstract-prompt.class.ts | 4 +- projects/workflows-element/package.json | 2 +- 5 files changed, 64 insertions(+), 28 deletions(-) diff --git a/projects/workflows-creator/src/lib/builder/builder.component.ts b/projects/workflows-creator/src/lib/builder/builder.component.ts index be0395a..d0275a6 100644 --- a/projects/workflows-creator/src/lib/builder/builder.component.ts +++ b/projects/workflows-creator/src/lib/builder/builder.component.ts @@ -163,7 +163,7 @@ export class BuilderComponent implements OnInit, OnChanges { const {events, actions, elseActions, groups, process, state} = await this.builder.restore(this.diagram); this.processId = process.id; - this.selectedActions = actions; + this.selectedActions = actions; this.selectedEvents = events; this.selectedElseActions = elseActions; if (this.selectedActions.length) this.actionGroups = []; diff --git a/projects/workflows-creator/src/lib/builder/group/group.component.html b/projects/workflows-creator/src/lib/builder/group/group.component.html index c8db58a..6a8cd09 100644 --- a/projects/workflows-creator/src/lib/builder/group/group.component.html +++ b/projects/workflows-creator/src/lib/builder/group/group.component.html @@ -70,8 +70,9 @@ (click)=" onNodeAdd(node, group.getIdentifier(), group.id); nodePopup.hide(); + $event.stopPropagation(); $event.stopPropagation() - ;$event.stopPropagation()" + " *ngFor="let node of nodeList" > {{ node.name }} @@ -164,14 +165,18 @@ let-nodeWithInput="nodeWithInput" let-hide="hide" > -
+
+ (mousedown)="handleMouseDown($event)" + (mouseup)="handleMouseUp()" + (mouseleave)="handleMouseLeave($event)" + placeholder="Enter the text here" + />
@@ -235,7 +240,7 @@ [closeOnSelect]="false" (blur)=" callback( - getLibraryValue(nodeWithInput.node,$event, inputType.People, { + getLibraryValue(nodeWithInput.node, $event, inputType.People, { list: list, key: 'value' }) @@ -266,7 +271,9 @@ @@ -292,14 +299,18 @@ class="close-btn" (click)=" callback( - getLibraryValue(nodeWithInput.node,{target: {value: dateTime}}, inputType.DateTime) + getLibraryValue( + nodeWithInput.node, + {target: {value: dateTime}}, + inputType.DateTime + ) ) " [disabled]="!dateTime.date" > Set -
+ @@ -349,4 +360,4 @@ - \ No newline at end of file + diff --git a/projects/workflows-creator/src/lib/builder/group/group.component.ts b/projects/workflows-creator/src/lib/builder/group/group.component.ts index 99f7101..a413445 100644 --- a/projects/workflows-creator/src/lib/builder/group/group.component.ts +++ b/projects/workflows-creator/src/lib/builder/group/group.component.ts @@ -59,9 +59,9 @@ export class GroupComponent implements OnInit, AfterViewInit { constructor( private readonly nodes: NodeService, private readonly localizationSvc: LocalizationProviderService, - ) {} + ) {} public inputType = InputTypes; - + private isMouseDown: boolean = false; @Input() group: AbstractBaseGroup; @@ -101,10 +101,10 @@ export class GroupComponent implements OnInit, AfterViewInit { date: DateType = {month: 0, day: 0, year: 0}; - dateTime:any={ - date:"", - time:"" - } + dateTime: any = { + date: '', + time: '', + }; emailInput: EmailInput = { subject: '', body: '', @@ -238,7 +238,7 @@ export class GroupComponent implements OnInit, AfterViewInit { this.dateTime = value; break; case InputTypes.People: - this.selectedItems = value.map((item: { id: string; }) => item.id); + this.selectedItems = value.map((item: {id: string}) => item.id); break; } } @@ -318,10 +318,10 @@ export class GroupComponent implements OnInit, AfterViewInit { groupId: string, id?: string, ) { - this.dateTime={ - date:"", - time:"" - } + this.dateTime = { + date: '', + time: '', + }; const newNode = { node: this.nodes.getNodeByName( node.getIdentifier(), @@ -521,12 +521,16 @@ export class GroupComponent implements OnInit, AfterViewInit { this.selectedItems = []; } - - getLibraryValue(node:BpmnNode,$event: any, type: string, metaObj: RecordOfAnyType) { + getLibraryValue( + node: BpmnNode, + $event: any, + type: string, + metaObj: RecordOfAnyType, + ) { const value = $event.target?.value ?? $event; switch (type) { case InputTypes.People: - const selectedIds = metaObj.list.filter((item: { id: any }) => + const selectedIds = metaObj.list.filter((item: {id: any}) => (this.selectedItems as any[]).includes(`${item.id}`), ); return selectedIds; @@ -543,8 +547,8 @@ export class GroupComponent implements OnInit, AfterViewInit { } case InputTypes.DateTime: if (value) { - if(this.dateTime.time===""){ - this.dateTime.time=node.state.get("defaultTime")??"9:00"; + if (this.dateTime.time === '') { + this.dateTime.time = node.state.get('defaultTime') ?? '9:00'; } const dateObj = moment(`${value.date} ${value.time}`); return { @@ -564,6 +568,27 @@ export class GroupComponent implements OnInit, AfterViewInit { return; } + handleMouseDown(event: MouseEvent): void { + this.isMouseDown = true; + } + + handleMouseUp(): void { + this.isMouseDown = false; + } + + handleMouseLeave(event: MouseEvent): void { + this.isMouseDown = false; + } + + handleDocumentClick(event: MouseEvent): void { + const target = event.target as HTMLElement; + + // Check if the click is outside the input element and not part of a drag + if (!this.isMouseDown) { + // If not a drag and click outside the input, hide the input box + this.hidePopper(); + } + } /** * It removes all the inputs that come after the current input * @param element - NodeWithInput diff --git a/projects/workflows-creator/src/lib/classes/nodes/abstract-prompt.class.ts b/projects/workflows-creator/src/lib/classes/nodes/abstract-prompt.class.ts index 015352e..752dc36 100644 --- a/projects/workflows-creator/src/lib/classes/nodes/abstract-prompt.class.ts +++ b/projects/workflows-creator/src/lib/classes/nodes/abstract-prompt.class.ts @@ -234,8 +234,8 @@ export abstract class WorkflowPrompt { DATE_TIME_FORMAT, ); return { - date: moment(dateString).format("YYYY-MM-DD"), - time: moment(dateString).format("hh:mm"), + date: moment(dateString).format('YYYY-MM-DD'), + time: moment(dateString).format('hh:mm'), }; } case InputTypes.Email: diff --git a/projects/workflows-element/package.json b/projects/workflows-element/package.json index 3e669ce..2e8b5e5 100644 --- a/projects/workflows-element/package.json +++ b/projects/workflows-element/package.json @@ -17,5 +17,5 @@ "access": "public", "directory": "dist" }, - "hash": "388809af6444a8fc997fa5e1e76c0f7847b34244a3cb68d956706dec8c470733" + "hash": "04a0e776afc8afd96f827f3e10f8c4ae642720bd7f79d9dcc9ca4552b9295eb2" } \ No newline at end of file